【问题标题】:GridView no column present even after DataBind()即使在 DataBind() 之后,GridView 也没有列
【发布时间】:2009-05-26 10:44:37
【问题描述】:

我有一个已经填充了数据的 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);
    }

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    编辑

    试试这个,它有点笨拙,因为它依赖于针对 GridView SortExpression 测试链接按钮文本。 Gridview ID 是“测试”

        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,然后遍历单元格并获取它们的 .Text 值。

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

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

    【讨论】:

    • 嗨,请查看我对问题的编辑。我实际上需要列中的 SortExpression 属性。
    • 您好,我应该在 .Contains() 中添加什么?
    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2012-03-01
    • 2012-03-06
    • 1970-01-01
    • 2020-05-31
    • 2019-03-08
    相关资源
    最近更新 更多