如何使gridview列可见?

时间:2011-10-18 07:12:32

标签: asp.net gridview

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

当我点击dept linkbutton时,我想这样做,它会使列emailID可见。 我怎么能这样做?Plaese指导我......

提前致谢。

这是我的网格:

            

            <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>

5 个答案:

答案 0 :(得分:1)

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

<asp:LinkButton ID="lnkDept"  OnClick="LinkButton_Click" runat="server" Text="Department" />

代码背后:

 protected void LinkButton_Click(Object sender, EventArgs e) 
      {
         gridView1.Columns[1].Visible=true;
      }

gridView.Column[1]是您的电子邮箱列。

答案 1 :(得分:1)

您必须处理events GridView控件,尤其是RowCommand

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;

    }
}

答案 2 :(得分:1)

当列的visibility属性设置为false时,无法使单元格可见。所以只显示相邻的细胞可见。

你可以使用类型模板字段的唯一一列,然后在该模板字段中创建一个表,并将电子邮件的td设置为可见的false和网格的行命令,因为之前的答案使得标签可见,你应该让你的td可见。

答案 3 :(得分:0)

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;
}  

这很简单,上面的代码就可以了 我们必须找到LinkBut​​ton被点击的哪一行,我们可以从中获取 以下代码。获得GridViewRow后,找到该行中的控件并使其可见

GridViewRow gvrow = ((LinkButton)sender).Parent.Parent as GridViewRow;

我们知道 Control&lt; --- Cell&lt; - GridViewRow&lt; - GridView

例如:
LinkBut​​ton&lt; --- Cell&lt; - GridViewRow&lt; - GridView

GridViewRow是单元格的父级,单元格是单元格内的控件的父级(面板)

答案 4 :(得分:-2)

function validateColors(id) {
    var grid = document.getElementById("GridView1");   
    var label = grid.rows[id].cells[6].children[2];
    grid.rows[id].cells[6].children[2].style.visibility = "visible";
    grid.rows[id].cells[6].children[2].style.visibility = "hidden";
}