Привет, я использую Gridview и мне нужно изменить видимое свойство элемента, которое во всех строках привязывается.
Я попытался изменить по коду, но изменилось только первое свойство элемента записи.
Элемент - это Panel
, и свойство, которое мне нужно изменить во всех записях; Visible
свойство.
Как я могу запустить этот GridView, как ретранслятор, чтобы иметь возможность изменять все видимые свойства элементов панели при связывании?
Мой код выглядит следующим образом:
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 имеет данные, привязанные к нему. Что вам нужно - это событие 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...
}
}