如何从gridview中获取单元格值而不使用单元格索引? 假设我表格中的第一列名称是“RowNumber”。如何在GridView中获取单元格值(不使用单元格索引)
而是采用
string name = GridView1.Rows[0].Cells[0].Text;
喜欢的东西
string name = GridView1.Rows[0].Cells["RowNumber"].Text;
如何从gridview中获取单元格值而不使用单元格索引? 假设我表格中的第一列名称是“RowNumber”。如何在GridView中获取单元格值(不使用单元格索引)
而是采用
string name = GridView1.Rows[0].Cells[0].Text;
喜欢的东西
string name = GridView1.Rows[0].Cells["RowNumber"].Text;
你可以施放GridViewRow's DataItem property成DataRowView的,然后引用列名:
DataRowView rowView = (DataRowView)GridView1.Rows[0].DataItem;
string name = rowView["RowNumber"].ToString();
你不能请从Cells
集合中进行此操作,因为它们只是Tabl eCell对象,他们不知道底层数据的任何信息。
DataItem属性表示来自底层数据源的该行中的值,所以这就是您想要处理的内容。
不,不工作
DataItem获取空值。 –
Adrian
@Adrian围绕该代码,确保您正在检查的行实际上是一个数据行('if(GridView1.Rows [0] .RowType == DataControlRowType.DataRow)')。行零可能是一个标题行,它没有与它相关的数据(同样,仅供参考 - 此处注释中不能换行)。 – jadarnel27
您可以使用数据键从行索引访问您想要的任何数据。
在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"];
这里的背后,是我写的一个功能。由于我们通常一次又一次地得到相同的字段列表,我缓存了索引查找。
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
请参阅http://stackoverflow.com/questions/9715983/how-to-get-the-cell-value-by-column-name - 不按索引在网格视图在ASP网 –
可能的重复[如何通过列名获取单元格值,而不是通过在asp.net中的GridView索引](https://stackoverflow.com/questions/9715983 /如何获取这个单元格值的列名不是索引在gridview在asp网) – AsifAli72090