C# 隐藏GridView ID列

C# 隐藏GridView ID列,c#,asp.net,.net,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 =

这似乎是一个普遍的问题

我正试图隐藏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”语句不会触发,因为我正在自动生成数据。通过上面的循环,我可以隐藏列的标题文本,但希望隐藏整个列,同时仍然能够访问隐藏的数据。

啊。。。因此,问题是列不是预定义的

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

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

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

在控件生命周期的后期,当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\u PreRender添加到GridView标记中。

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

现在咬紧牙关,定义您的列。如果这是您需要进行的唯一自定义,您可能没问题,但90%以上的时间我最终会定义列以自定义它们的显示方式

否则,在各种情况下(例如,数据源中列的顺序发生更改)都会出现一些容易中断的调整。

为什么不使用GridView.DataKeyNames和GridView.DataKeys属性来存储ID,然后使用rowIndex检索它?这也将防止自动生成列


我想这已经在《绑定的召唤》的幕后发生了;在OPs页面的第一行中,\加载方法。@Narnian。Yes bind调用填充gridview的方法。谢谢您的回答。我见过这个方法,但我不确定我应该以对象和事件参数的形式为这个方法提供什么?如果被触发,“else”会不会不仅仅隐藏单元格标题?因为我不希望发生这种情况,只希望整个专栏hidden@user1352057你不需要提供任何东西。如果添加我在最后提到的标记,事件将自动连接。Re:另外,我刚刚把你的代码复制了进来。如果您不想让else隐藏标题,请务必将其忽略。再次感谢您的帮助。当您谈到onprerender时。我需要在我的onload中声明这个吗?我已尝试添加它,但当前出现错误。@user1352057您遇到的错误是什么?您应该可以将该文本添加到.aspx页面中的GridView标记中。我已将代码添加到原始问题中。我已经在aspx页面中声明了它,但是我仍然收到一个错误,我的列是0。@D Stanley谢谢你的回答。您的意思是在服务器端预定义它们吗?不,您可以在标记中定义它们。设计人员应提供屏幕,以便在设计时添加列。