隐藏GridView ID列

时间:2013-03-04 20:06:46

标签: c# asp.net .net

似乎是一个常见问题。

我正在尝试隐藏GridView的一列。我已经读过,只是将列设置为'visible = false'将无法正常工作,因为我正在自动生成数据。

目前我的代码如此:

 protected void Page_Load(object sender, EventArgs e)
    {
        bind();

        if (GridView1.Columns.Count > 0)
            GridView1.Columns[0].Visible = false;
        else
        {
            GridView1.HeaderRow.Cells[0].Visible = false;
            foreach (GridViewRow gvr in GridView1.Rows)
            {
                gvr.Cells[1].Visible = false;
            }
        }

    }

'if'语句不会像我说的那样自动生成数据。通过上面的循环,我可以隐藏列的标题文本,但是希望隐藏整个列,并且能够仍然能够访问隐藏数据。

4 个答案:

答案 0 :(得分:4)

如何在控件的生命周期中稍后执行此操作(填充Columns集合时):

protected void GridView1_PreRender(object sender, EventArgs e)
{
    if (GridView1.Columns.Count > 0)
        GridView1.Columns[0].Visible = false;
    else
    {
        GridView1.HeaderRow.Cells[0].Visible = false;
        foreach (GridViewRow gvr in GridView1.Rows)
        {
            gvr.Cells[1].Visible = false;
        }
    }
}

注意:您需要将OnPreRender="GridView1_PreRender"添加到GridView标记中。

答案 1 :(得分:1)

为什么不使用GridView.DataKeyNamesGridView.DataKeys属性来存储ID,然后使用rowIndex检索它?这也将使列无法自动生成。

DataKeyNames

DataKeys

答案 2 :(得分:0)

啊......所以问题是Columns没有预定义。

也许您可以使用Linq选择要显示的所有列:

gvTest.DataSource = (from d in dataSource
                     select new 
                     {
                         ColumnA = d.ColumnA...
                     }

或者,您可以使用JavaScript隐藏列;

答案 3 :(得分:0)

这是自动生成列的限制。您放弃了对列的显示方式的大量控制,以方便不预先定义它们。

现在咬紧牙关并定义你的专栏。如果这是您需要进行的唯一自定义,那么您可能会做得很好,但是90%以上的时间我最终会定义列以自定义它们的显示方式。

否则,您最终会遇到一些在各种情况下容易破裂的“调整”(例如,数据源中列的顺序发生变化)。