asp .net如何隐藏gridview列的TemplateField但仍然可以访问其值

时间:2012-03-01 10:28:16

标签: c# datagridview

我有一个datagridview,它通过一个strored过程加载。它有一个ID列,我想隐藏它但仍然访问它的值。我设置了dataKeyNames,我有一个方法

     protected void grdTime_OnDataBound(object sender,EventArgs e)
    {
        grdTime.Columns[1].Visible = false;
    }

我试图隐藏此列,但我收到以下错误。如果我删除方法内部的行,它的工作原理。这是错误。 指数超出范围。必须是非负数且小于集合的大小。 参数名称:index

4 个答案:

答案 0 :(得分:0)

在方法中尝试此代码,然后检查..

grdTime.Columns [0] .Visible = false;

答案 1 :(得分:0)

隐藏Row_Created事件中的列

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[1].CssClass = "hiddencol";
        //e.Row.Cells[2].CssClass = "hiddencol";
    }
    else if (e.Row.RowType == DataControlRowType.Header)
    {
        e.Row.Cells[1].CssClass = "hiddencol";
        //e.Row.Cells[2].CssClass = "hiddencol";
    }
}

此处hiddencol是一个css类

.hiddencol
{
    display:none;
}

在上面的代码中我隐藏了我网格的第二列

答案 2 :(得分:0)

如果您已将GridView的AutoGenerateColumns设置为true(默认值),则Columns-Collection为空。以下应该工作:

1)

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
        e.Row.Cells[0].Visible = false;
}

2)。

foreach (TableRow row in GridView1.Controls[0].Controls)
{
    row.Cells[0].Visible = false;
}

答案 3 :(得分:0)

你可以在.aspx页面上的gridview标签中使用这样的东西

<Columns>

      <asp:BoundField HeaderText="Merchandise Id" DataField="MerchandiseId"  Visible="false" /></columns>