Asp.net 如何使gridview的列可见?

Asp.net 如何使gridview的列可见?,asp.net,gridview,Asp.net,Gridview,我使用的是Gridview。在这里我有两列,即department和emailID。在这个Gridview中,department是从数据库绑定的,并显示在Gridview的linkbutton中 <asp:TemplateField> <ItemTemplate> <asp:LinkButton ID="lnkbtnDept" runat="server" Text='

我使用的是Gridview。在这里我有两列,即department和emailID。在这个Gridview中,department是从数据库绑定的,并显示在Gridview的linkbutton中

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkbtnDept" runat="server" Text='<%#Bind("Department")%>' OnClick="lnkbtnTitle_Click" ></asp:LinkButton>                        
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Left" Width="50%" />
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlN24" runat="server" Visible="false">
                        <asp:Label ID="lblTotal" runat="server" Width="30" Text="abc"></asp:Label>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
我想这样做,当我点击第四个部门链接按钮,它使可见列emailID。 我该怎么做?请引导我

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkbtnDept" runat="server" Text='<%#Bind("Department")%>' OnClick="lnkbtnTitle_Click" ></asp:LinkButton>                        
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Left" Width="50%" />
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlN24" runat="server" Visible="false">
                        <asp:Label ID="lblTotal" runat="server" Width="30" Text="abc"></asp:Label>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
提前谢谢

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkbtnDept" runat="server" Text='<%#Bind("Department")%>' OnClick="lnkbtnTitle_Click" ></asp:LinkButton>                        
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Left" Width="50%" />
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlN24" runat="server" Visible="false">
                        <asp:Label ID="lblTotal" runat="server" Width="30" Text="abc"></asp:Label>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
这是我的表格:

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkbtnDept" runat="server" Text='<%#Bind("Department")%>' OnClick="lnkbtnTitle_Click" ></asp:LinkButton>                        
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Left" Width="50%" />
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlN24" runat="server" Visible="false">
                        <asp:Label ID="lblTotal" runat="server" Width="30" Text="abc"></asp:Label>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkbtnDept" runat="server" Text='<%#Bind("Department")%>' OnClick="lnkbtnTitle_Click" ></asp:LinkButton>                        
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Left" Width="50%" />
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlN24" runat="server" Visible="false">
                        <asp:Label ID="lblTotal" runat="server" Width="30" Text="abc"></asp:Label>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

理解您将使列中所有行的所有单元格都可见,您可以处理dept按钮的OnClick事件。比如说

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkbtnDept" runat="server" Text='<%#Bind("Department")%>' OnClick="lnkbtnTitle_Click" ></asp:LinkButton>                        
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Left" Width="50%" />
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlN24" runat="server" Visible="false">
                        <asp:Label ID="lblTotal" runat="server" Width="30" Text="abc"></asp:Label>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
<asp:LinkButton ID="lnkDept"  OnClick="LinkButton_Click" runat="server" Text="Department" />

其中
gridView.Column[1]
是您的电子邮件列。

您必须处理
gridView
控件的
事件,尤其是
RowCommand

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkbtnDept" runat="server" Text='<%#Bind("Department")%>' OnClick="lnkbtnTitle_Click" ></asp:LinkButton>                        
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Left" Width="50%" />
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlN24" runat="server" Visible="false">
                        <asp:Label ID="lblTotal" runat="server" Width="30" Text="abc"></asp:Label>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
public class Demo
{
    public string Dept { get; set; }
    public string Email { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        List<Demo> list = new List<Demo>()
        {
                new Demo() { Dept="A", Email="a@a.com" },
                new Demo() { Dept="B", Email="b@b.com" },
        };

        GridView1.DataSource = list;
        GridView1.DataBind();
    }

}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "cmd")
    {
        GridViewRow row = (e.CommandSource as LinkButton).NamingContainer as GridViewRow;
        Label email = row.Cells[1].FindControl("email") as Label;
        email.Visible = true;

    }
}
公共类演示
{
公共字符串Dept{get;set;}
公共字符串电子邮件{get;set;}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
列表=新列表()
{
新建演示({Dept=“A”,电子邮件=”a@a.com" },
新演示({Dept=“B”,电子邮件=”b@b.com" },
};
GridView1.DataSource=列表;
GridView1.DataBind();
}
}
受保护的void GridView1_row命令(对象发送方,GridViewCommandEventArgs e)
{
如果(如CommandName==“cmd”)
{
GridViewRow行=(e.CommandSource作为LinkButton)。NamingContainer作为GridViewRow;
Label email=row.Cells[1]。FindControl(“电子邮件”)作为标签;
email.Visible=true;
}
}

当列的可见性属性设置为false时,不可能使单元格可见。因此,仅显示相邻单元可见

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkbtnDept" runat="server" Text='<%#Bind("Department")%>' OnClick="lnkbtnTitle_Click" ></asp:LinkButton>                        
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Left" Width="50%" />
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlN24" runat="server" Visible="false">
                        <asp:Label ID="lblTotal" runat="server" Width="30" Text="abc"></asp:Label>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
您可以只使用模板字段类型的一列,然后在该模板字段中创建一个表,并将电子邮件的td设置为visible false,并将网格的on row命令设置为前面的答案,使标签可见。您应该使td可见

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkbtnDept" runat="server" Text='<%#Bind("Department")%>' OnClick="lnkbtnTitle_Click" ></asp:LinkButton>                        
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Left" Width="50%" />
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlN24" runat="server" Visible="false">
                        <asp:Label ID="lblTotal" runat="server" Width="30" Text="abc"></asp:Label>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
protected void lnkbtnTitle_Click(object sender, EventArgs e)
{
    GridViewRow gvrow = ((LinkButton)sender).Parent.Parent as GridViewRow;
    Panel pnlN24 = (Panel)gvrow.FindControl("pnlN24");
    pnlN24.Visible = true;
}  
这非常简单,上面的代码可以工作。
我们必须找到单击链接按钮的行,我们可以从
下面的代码。获得GridViewRow后,在该行中找到控件并使其可见

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkbtnDept" runat="server" Text='<%#Bind("Department")%>' OnClick="lnkbtnTitle_Click" ></asp:LinkButton>                        
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Left" Width="50%" />
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlN24" runat="server" Visible="false">
                        <asp:Label ID="lblTotal" runat="server" Width="30" Text="abc"></asp:Label>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
GridViewRow gvrow = ((LinkButton)sender).Parent.Parent as GridViewRow;
正如我们所知

控件我认为您希望只显示该部门的相邻单元格,而不是电子邮件的完整列。如果列完全可见=false,那么我们是否可以显示该部门的任何单元格column@rahularyansharma-不,这是不可能的。在设置单个组件的可见性属性之前,您需要查看该列。谢谢,但该用户需要该功能,因此这无法通过两列实现。如果她将两列都放在一列中,并使用表中的模板字段中的表,则她可以从服务器端查看tdcode@rahularyansharma-是的!OP必须在其设计中使用单列(模板)字段。感谢rahularyansharma,我已经这样做了。我已经删除了面板,并将可见性设置为label.nw,其工作正常。请解释一下?