您好,我正在使用 Gridview,需要更改元素的可见属性 绑定(bind)时在所有行中。
我试图通过代码隐藏来改变,但是, 只有第一条记录的元素的属性发生了变化。
该元素是一个面板
,
我需要在所有记录上更改的属性是; 可见
属性。
我怎样才能像 Repeater 一样运行这个 GridView,以便能够在绑定(bind)时更改所有 Panel 元素的 Visible 属性?
我的代码如下:
ASPX:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
GridLines="None" DataKeyNames="ID"
AllowPaging="True" OnDataBinding="GridView1_DataBinding">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Panel ID="Panel1" runat="server" Visible="false">
<!-- code ... -->
</asp:Panel>
<asp:Panel ID="Panel2" runat="server" Visible="false">
<!-- code ... -->
</asp:Panel>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
CS:
private void Method1(string Key)
{
if (Key==1)
{
Panel Panel1 = GridView1.Controls[0].Controls[1].FindControl("Panel1") as Panel;
Panel1.Visible = true;
}
else
{
Panel Panel2 = GridView1.Controls[0].Controls[1].FindControl("Panel2") as Panel;
Panel2.Visible = true;
}
}
protected void GridView1_DataBinding(object sender, EventArgs e)
{
Method1(1);
}
最佳答案
您的问题是您正在使用 OnDataBinding
事件。这只会发生一次——当 GridView 有数据绑定(bind)到它时。您需要的是 OnRowDataBound
事件。这将每行触发一次。
OnRowDataBound="GridView1_RowDataBound"
然后在后面的代码中处理它,找到每一行中的面板。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
Panel Panel1 = (Panel)e.Row.FindControl("Panel1");
//So on and so forth...
}
}
关于c# - 如何像 Repeater 一样运行 GridView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24970888/