ASP.NET GridView 有没有办法根据您所在的单元格获取列名

本文关键字:单元格 获取 GridView NET 有没有 ASP | 更新日期: 2023-09-27 18:22:18

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
         foreach (TableCell cell in e.Row.Cells)
         {
             // .... here ....
             cell.Text = cell.Text.Replace(entry.Value, "<span class='highlightSearchTerm'>" + entry.Value + "</span>");
         }
     }
}

它说的部分....这里。。。。我需要以某种方式获取数据网格的列名。因此,根据我当前所在的单元格,我需要获取列名称。稍后在代码中,根据我在哪个列中,我需要为单元格执行不同的格式设置。此外,列名在运行时是未知的,它们是动态生成的,所以我需要一个通用方法来获取列名。

ASP.NET GridView 有没有办法根据您所在的单元格获取列名

试试这个:

string currentColName = GridView1.Columns[GridView1.CurrentCell.ColumnIndex].Name;

按列 Name 如果你的意思是HeaderText那么你可以使用 for 循环而不是 foreach ,使用索引得到HeaderText像:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        for (int i = 0; i < e.Row.Cells.Count; i++)
        {
            TableCell cell = e.Row.Cells[i];
            string HeaderText  = yourGridView.Columns[i].HeaderText;
            cell.Text = cell.Text.Replace(entry.Value,
                "<span class='highlightSearchTerm'>" + entry.Value + "</span>");
            }
        }
    }
}

您可以更改循环的方式,并制作类似以下内容:

   for (int i = 0; i < gvMyLista.Rows.Count; i++)
   {
       // get your data as...
       // gvMyLista.Rows[i].Cells[2].Text
   }

您可以直接看到cellrow.gvMyLista是网格视图的 ID。

现在,如果您在此处进行格式设置,则在回发后可能会更改,因为数据可能不会再次绑定,因此我建议在PreRender上进行格式化,这里有一个类似的问题: 回发后如何在网格视图上保留颜色? asp.net C#

我必须为自己制定一种方法来达到这个目的。像这样的东西应该内置到对象中,这样我们就可以轻松获得我们需要的信息。不幸的是,当它没有内置时,我们必须自己获取它:

    /// <summary>
    /// Makes the assumption that the TableCell is a bound DataControlField cell, and returns the name of the column of the table
    /// </summary>
    /// <param name="tc"></param>
    /// <returns></returns>
    private string GetColumnNameOfTableCell (TableCell tc)
    {
        return ((BoundField)((DataControlFieldCell)tc).ContainingField).DataField;
    }