2013-10-21 145 views
2

如何从gridview中获取单元格值而不使用单元格索引? 假设我表格中的第一列名称是“RowNumber”。如何在GridView中获取单元格值(不使用单元格索引)

而是采用

string name = GridView1.Rows[0].Cells[0].Text; 

喜欢的东西

string name = GridView1.Rows[0].Cells["RowNumber"].Text; 
+0

请参阅http://stackoverflow.com/questions/9715983/how-to-get-the-cell-value-by-column-name - 不按索引在网格视图在ASP网 –

+0

可能的重复[如何通过列名获取单元格值,而不是通过在asp.net中的GridView索引](https://stackoverflow.com/questions/9715983 /如何获取这个单元格值的列名不是索引在gridview在asp网) – AsifAli72090

回答

5

你可以施放GridViewRow's DataItem property成DataRowView的,然后引用列名:

DataRowView rowView = (DataRowView)GridView1.Rows[0].DataItem; 
string name = rowView["RowNumber"].ToString(); 

你不能请从Cells集合中进行此操作,因为它们只是Tabl eCell对象,他们不知道底层数据的任何信息。

DataItem属性表示来自底层数据源的该行中的值,所以这就是您想要处理的内容。

+0

不,不工作
DataItem获取空值。 – Adrian

+0

@Adrian围绕该代码,确保您正在检查的行实际上是一个数据行('if(GridView1.Rows [0] .RowType == DataControlRowType.DataRow)')。行零可能是一个标题行,它没有与它相关的数据(同样,仅供参考 - 此处注释中不能换行)。 – jadarnel27

1

您可以使用数据键从行索引访问您想要的任何数据。

在gridview的标记中,添加所有你想访问gridview的字段。

<asp:GridView ID="gvTransactionHistory" runat="server" 
    AutoGenerateColumns="false" 
    onselectedindexchanging="gvTransactionHistory_SelectedIndexChanging" 
    DataKeyNames="ID, AnyField"> 

这些datakeys可以在代码中访问与该行指数

var id = gvTransactionHistory.DataKeys[rowIndex].Values["ID"]; 
    var AnyField = gvTransactionHistory.DataKeys[rowIndex].Values["AnyField"]; 
0

这里的背后,是我写的一个功能。由于我们通常一次又一次地得到相同的字段列表,我缓存了索引查找。

private static readonly HybridDictionary cache = new HybridDictionary(); 

    public static object[] GetColumnValues(
     this GridView g, 
     int rownumber, 
     string columnNamesCommaSeparated) 
    { 
     var dataView = g.DataSource as DataView; 
     if (dataView != null) 
     { 
      DataRow dataRow = dataView[rownumber].Row; 
      object[] items = dataRow.ItemArray; 
      DataColumnCollection columns = dataRow.Table.Columns; 

      string lookupkey = g.ID + columnNamesCommaSeparated; 
      var colids = cache[lookupkey] as int[]; 
      int columnCount; 
      if (colids == null) 
      { 
       string[] columnNames = columnNamesCommaSeparated.Split(','); 
       columnCount = columnNames.Count(); 
       colids = new int[columnCount]; 

       for (int i = 0; i < columnCount; i++) 
       { 
        colids[i] = columns.IndexOf(columnNames[i]); 
       } 

       cache.Add(lookupkey, colids); 
      } 
      columnCount = colids.Length; 
      var values = new object[columnCount]; 

      for (int i = 0; i < columnCount; i++) 
      { 
       values[i] = items[colids[i]] ?? ""; 
      } 
      return values; 
     } 

     return null; 
    } 

用它做类似

  object[] values = g.GetColumnValues(e.Row.DataItemIndex, "Firstname,Lastname,CompanyName"); 
      if (values != null) 
      { 
       string header = Server.HtmlEncode(values[0] + " " + values[1] + " @ " + values[2]); 
      } 
      // do whatever you want with this value 
相关问题