【问题标题】:How to get column name from gridview?如何从gridview获取列名?
【发布时间】:2012-03-07 18:00:35
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: c# asp.net sql


    【解决方案1】:

    你可以这样得到它:

    gv.HeaderRow.Cells[i].Text
    

    或者像这样:

    gv.Rows[0].Cells[i].Text
    

    Rows[0] 应该是您的标题行。

    【讨论】:

    • 37 分钟后,未标记任何答案。也许这个通知会提醒他们。
    • 嗨,我试过了,我只得到数字,我需要得到列名
    • 我明白了  而不是列的名称
    • 您是否设置了标题文本?或者你是标题文本  ...?
    • 列名?是 .. 叫 Name ,我应该得到名字吗?
    【解决方案2】:
    //// 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;
    }
    

    【讨论】:

      【解决方案3】:

      简单

       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;
              }
          }
      

      【讨论】:

      • 嗨,我试过了,我只得到数字,我需要得到列名
      • 可能是您在 HeaderRow 上的子控件中的列单元格。试试我的更新代码。让我知道会发生什么?
      • 我得到对象引用未设置为对象字符串 s= lb.text 的实例
      • 奇怪!!它在我的页面中工作。你能在控制台中看到你在 HTML 页面中呈现的单元格是什么吗?
      • 我可以看到所有 gridview 的所有信息 fi 这就是你的意思
      【解决方案4】:

      重新审视这个老问题.... 可以使用这种代码获取绑定到 GridView 的数据的字段名称。这将创建一个包含列号和字段名称的字典。

      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;
      }
      

      【讨论】:

      • 这里只回答字段名称而不是列标签文本。
      【解决方案5】:

      这不是问题的答案。如果您从不更改网格视图中的标题文本,这只是答案。提问者想通过索引获取数据库字段名。

      我见过一些“答案”,它们只提供网格视图的选定行中的文本,或者标题文本都没有回答所提出的问题......

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

      例如:

      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
      

      所以问题是如何通过后面的代码通过索引获取数据库表字段名称?我也一直在寻找这个,我所看到的所有“答案”并不是我认为我们中的一些人真正在寻找的答案。我在这里看到的所有提到的方法都不是对数据库表字段名称的防弹引用。

      【讨论】:

        【解决方案6】:

        很简单:在这里,我读取了每个标题单元格的 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(); */
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-14
          • 2020-10-16
          • 2019-01-13
          • 2014-05-20
          • 1970-01-01
          • 2014-08-18
          • 1970-01-01
          相关资源
          最近更新 更多