Как запустить GridView как повторитель?

1

Привет, я использую 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);
}
  • 0
    На самом деле было бы неплохо использовать jQuery для 1 или 2 значений в строке запроса, а затем я могу скрыть или сделать панели видимыми ... Хм, да, я напишу это, спасибо, что договорились.
Теги:
gridview

1 ответ

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...
    }
}
  • 0
    Спасибо, это сработало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню