GridView甚至在DataBind()之后也没有列

时间:2009-05-26 10:44:38

标签: asp.net gridview

我有一个已经填充了数据的DataView(已经验证这是真的)。​​

然后我将GridView的DataSource设置为该DataView并调用.DataBind()函数。

绑定后,我检查了我的GridView(grid.Columns.Count)的列数,它显示为0.但它显示的是15列的正确输出。

此外,使用索引访问列将引发异常。

如何访问该列呢?

谢谢!

编辑 - 附加信息:

我实际上需要在列标题中添加“字形”(向上/向下箭头)以显示正在排序的列及其方向。下面的代码就是我正在使用的代码。问题是,Columns.Count始终为零。

    for (int i = 0; i < dgData.Columns.Count; i++)
    {
        string colExpr = dgData.Columns[i].SortExpression;
        if (colExpr != "" && colExpr == dgData.SortExpression)
            item.Cells[i].Controls.Add(glyph);
    }

1 个答案:

答案 0 :(得分:2)

修改

试试这个,它有点难看,因为它依赖于对GridView SortExpression测试linkbutton文本。 Gridview ID是“test”

    protected void test_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            foreach (TableCell tc in e.Row.Cells)
            {
                if(test.SortExpression.Contains( (tc.Controls[0] as LinkButton).Text ))
                    tc.Controls.Add( glyph )
            }
        }
    }

如果您要自动生成列,我认为不会设置列集合...

您可以检查Row.Cells.Count或者如果您需要列名称,请抓住HeaderRow,然后遍历Cells&amp;抓住他们的.Text价值。

如果GridView是可排序的(例如标题中有可点击的链接,那么要获取列名,您需要检查

foreach(Row r in GridView.Rows)
{
    if(r.RowType == HeaderRow)
    {
         r.Cells[0].Controls[0]; //Link Control is here.
    }
}