C# 如何从gridview获取列名?

C# 如何从gridview获取列名?,c#,asp.net,sql,C#,Asp.net,Sql,我想知道如何从gridview中获取列名?按号码而不是名字。 比如:姓名|年龄|生日:(所以姓名=0,年龄=1等等) 谢谢。您可以这样得到: gv.HeaderRow.Cells[i].Text gv.Rows[0].Cells[i].Text 或者像这样: gv.HeaderRow.Cells[i].Text gv.Rows[0].Cells[i].Text 行[0]应该是您的标题行。 GridView1.Rows[0].Cells[0].Text; 如果要从每行中删除所有单元格的

我想知道如何从gridview中获取列名?按号码而不是名字。 比如:姓名|年龄|生日:(所以姓名=0,年龄=1等等)


谢谢。

您可以这样得到:

gv.HeaderRow.Cells[i].Text
gv.Rows[0].Cells[i].Text
或者像这样:

gv.HeaderRow.Cells[i].Text
gv.Rows[0].Cells[i].Text
行[0]应该是您的标题行。

 GridView1.Rows[0].Cells[0].Text;
如果要从每行中删除所有单元格的值,请尝试此操作

  foreach (GridViewRow r in GridView1.Rows)
    {
        string s = r.Cells[0].Text;
        string y = r.Cells[1].Text;
    }
更新:

试试这个

  foreach (TableCell Tc in GridView1.HeaderRow.Cells)
    {
        //if you are not getting value than find childcontrol of TabelCell.
        string sssb = Tc.Text;
        foreach (Control ctl in Tc.Controls)
        {

            //Child controls
            Label lb = ctl as Label;
            string s = lb.Text;
        }
    }

这不是问题的答案。只有当您从未更改gridview中的标题文本时,这才是答案。提问者希望通过索引获取数据库字段名

我已经看到了一些“答案”,它们只提供gridview选定行中的文本,或者标题文本,它们都不回答所问的问题

你可能会问为什么?如果您要对系统中的更新进行审核,并且希望比较旧值和新值,并且仅在它们更改时更新,并且希望指示哪个字段已更新,那么如何在循环的索引处显示数据库表字段名

例如:

Protected Sub gv_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs)
    Dim intValCount As Integer = Integer.Parse(e.NewValues.Count)
    If intValCount > 0 Then
        Dim i As Integer = 0
        For i = 0 To intValCount - 1
            If Not e.OldValues(i).Equals(e.NewValues(i)) Then
                ' values have changed, audit the change
                Sys.Audits.General(intID, "the_database_table", <the table field by index(i)>, e.OldValues(i).ToString, e.NewValues(i).ToString)
            End If
            i += 1
        Next
    End If
End Sub
受保护的子gv\u行更新(发送方作为对象,e作为System.Web.UI.WebControl.GridViewUpdateEventArgs)
Dim intValCount As Integer=Integer.Parse(e.NewValues.Count)
如果intValCount>0,则
尺寸i为整数=0
对于i=0到intValCount-1
如果不是e.OldValues(i).等于(e.NewValues(i)),那么
'值已更改,请审核更改
Sys.Audits.General(intID,“数据库表”,例如OldValues(i).ToString,例如NewValues(i).ToString)
如果结束
i+=1
下一个
如果结束
端接头
所以问题是如何通过代码隐藏通过索引获得数据库表字段名?我也一直在寻找这个答案,我看到的所有“答案”都不是我认为我们中的一些人真正想要的答案。我在这里看到的所有提到的方法都不是对数据库表字段名的防弹引用。

///标题列名
//// Header column names
int gridViewCellCount = yourGridView.Rows[0].Cells.Count;
// string array to hold grid view column names.
string[] columnNames = new string[gridViewCellCount];

for (int i = 0; i < gridViewCellCount; i++)
{
    columnNames[i] = ((System.Web.UI.WebControls.DataControlFieldCell)(yourGridView.Rows[0].Cells[i])).ContainingField.HeaderText;
}
private static IDictionary<int, string> GetGridViewFieldNames(object grid)
{
    var names = new Dictionary<int, string>();
    var view = grid as GridView;
    if (view != null)  {
        for (var i = 0; i < view.Columns.Count; i++)  {
            var field = view.Columns[i] as BoundField;
            if (field != null)  {
                names.Add(i, field.DataField);
            }
        }
    }
    return names;
}
int gridViewCellCount=yourGridView.Rows[0].Cells.Count; //用于保存栅格视图列名的字符串数组。 string[]columnNames=新字符串[gridViewCellCount]; 对于(int i=0;i
重温这个老问题。。。。使用这种代码可以获得绑定到GridView的数据的字段名。这将生成一个colnum和字段名的字典

//// Header column names
int gridViewCellCount = yourGridView.Rows[0].Cells.Count;
// string array to hold grid view column names.
string[] columnNames = new string[gridViewCellCount];

for (int i = 0; i < gridViewCellCount; i++)
{
    columnNames[i] = ((System.Web.UI.WebControls.DataControlFieldCell)(yourGridView.Rows[0].Cells[i])).ContainingField.HeaderText;
}
private static IDictionary<int, string> GetGridViewFieldNames(object grid)
{
    var names = new Dictionary<int, string>();
    var view = grid as GridView;
    if (view != null)  {
        for (var i = 0; i < view.Columns.Count; i++)  {
            var field = view.Columns[i] as BoundField;
            if (field != null)  {
                names.Add(i, field.DataField);
            }
        }
    }
    return names;
}
私有静态IDictionary GetGridViewFieldName(对象网格)
{
var name=newdictionary();
var view=网格作为GridView;
如果(视图!=null){
对于(var i=0;i
很简单:在这里,我读取每个标题单元格的gridview标题文本,并将它们作为新列添加到数据表中

DataTable dt = new DataTable();
foreach(DataControlFieldHeaderCell column in yourGridview.HeaderRow.Cells)
{
  dt.Columns.Add(column.Text.Trim().Replace(" ", ""));                           
}

//Make sure you do all this after yourGridview.DataBind(); 
//If you do not want to bind data first simply bind an empty list like so:
/* yourGridview.DataSource = new List<string>();
   yourGridview.DataBind(); */
DataTable dt=newdatatable();
foreach(GridView.HeaderRow.Cells中的DataControlFieldHeaderCell列)
{
添加(column.Text.Trim().Replace(“,”);
}
//确保在gridview.DataBind()之后执行所有这些操作;
//如果不想先绑定数据,只需绑定一个空列表,如下所示:
/*yourGridview.DataSource=新列表();
yourGridview.DataBind()*/

37分钟后,没有回答。也许这个通知会提醒他们。嗨,我已经试过了,但我只得到了号码,我需要得到我得到的列名,而不是列名。你甚至设置了标题文本吗?或者是标题文本…?列名?是调用名称,我应该得到名称?嗨,我已经尝试过了,我只得到了号码,我需要得到列名可能是HeaderRow上childcontrol中的列单元格。请尝试我的更新代码。然后让我知道发生了什么?我得到的对象引用没有设置为对象字符串s=lb.textstrange的实例!!它在我的页面中起作用。你能在控制台中看到你的单元格在HTML页面中呈现的是什么吗?我能看到所有的gridview和所有的信息fi,这就是你的意思。这里的答案是在字段名而不是列标签文本处进行尝试。