获取GridView列标题文本 - 始终返回空白

时间:2013-01-10 14:59:25

标签: c# asp.net gridview

我有一个GridView,我想从。

获取列标题的文本
for (int j = 0; j < grdToDisplay.HeaderRow.Cells.Count; j++)
{
    string s = grdToDisplay.HeaderRow.Cells[j].Text.ToString(); //Returns ""
    s = grdToDisplay.HeaderRow.Cells[j].Text; //Returns ""
    s = grdToDisplay.Rows[0].Cells[j].Text; //Returns text from first row of results not the header
   // s = grdToDisplay.Columns[j].HeaderText.ToString(); // does not work as column count is 0
}

GridView内容是在运行时根据用户查询生成的。标题可以点击进行排序。

如何循环GridView并列出列标题文本?

6 个答案:

答案 0 :(得分:4)

您可以使用GridViewColumn.HeaderText

for (int i = 0; i < grdToDisplay.Columns.Count; i++)
{
    string header = grdToDisplay.Columns[i].HeaderText;
}

修改

  

但由于列数为0

,这不会给我任何结果

然后你有AutoGenerateColumns=true并且只计算声明性添加的列。因此,在数据绑定之后,请使用之后的代码

GridView

答案 1 :(得分:2)

由于GridView的标题是可排序的,因此您可以从Linkbutton获取标题的文本。试试这个: 将以下代码放在gridView的DataBind中:

for (int i = 0; i < gridView.HeaderRow.Cells.Count; i++)
            {

                if (gridView.HeaderRow.Cells[i].HasControls())
                {
                    //when gridview is sortable, type of header is LinkButton
                    // Linkbutton is in index 0 of the control
                    if (gridView.HeaderRow.Cells[i].Controls[0] is LinkButton)
                    {
                        LinkButton headerControl = gridView.HeaderRow.Cells[i].Controls[0] as LinkButton;
                       string headerName = headerControl.Text;

                    }

                }

            }

答案 2 :(得分:0)

我根据我在这里和其他线程中阅读的内容创建了自己的解决方案..在这里:

public void HideColumnByName(GridView grid, string header)
        {
            if (grid.HeaderRow.HasControls()==true)
            {
                for (int i = 0; i < grid.HeaderRow.Cells.Count; i++)
                {
                    if (grid.HeaderRow.Cells[i].Text == header)
                    {
                        foreach (GridViewRow row in grid.Rows)
                        {
                            row.Cells[i].Visible = false;
                            grid.HeaderRow.Cells[i].Visible = false;
                        }
                    }

                }
            }
        }

该方法直接隐藏了列的标题和单元格,其中标题名称(或列名称)是传递给我的方法的字符串参数('header'param)。然后从我的gridview的“DataBound”事件中调用“HideColumnByName”方法。简单。希望这可以帮助 !它确实对我有用! :)

答案 3 :(得分:0)

我最近在做一些最近的编码时遇到了这个问题,任何时候我尝试获取头文本时它甚至会在数据绑定事件上返回空白。当我想尝试根据列自己的控制方案转换标头时,我才解决了这个问题。

事实证明,使gridview可排序会将标题文本转换为其他内容,从而无法简单地从标题中获取信息而无需转换它。我自己解决这个问题的方法就是在我要求提供文本时简单地让它不可排序,但假设这是不可能的,我确实遇到了获取文本的解决方案,即使它在另一个线程中是可排序的:

ASP.NET GridView header row text empty when AllowSorting enabled

答案 4 :(得分:0)

enter image description here
如果模板列基于数据源

,标题文本将返回字段名称
  • GridView.Columns(ⅰ).HeaderText

但如果您需要获取列的标题文本,请首先使用该行

  • GridView.HeaderRow.Cells(ⅰ)。文本

此链接可能对您有所帮助 Get Header Text of Gridview Cell

答案 5 :(得分:0)

grdExcel.HeaderRow.Cells[0].Text.ToString();