如何像运行中继器一样运行GridView

本文关键字:运行 一样 GridView 何像 中继器 | 更新日期: 2023-09-27 18:15:05

你好,我正在使用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);
}

如何像运行中继器一样运行GridView

您的问题是您正在使用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...
    }
}