【发布时间】:2013-07-08 11:46:35
【问题描述】:
我想按单元格值学习行索引。我知道单元格值“E003”。如何学习该行包含单元格值“E003”的行索引?我需要 7 而不是 11。
var table =TableAdapter.GetData();
var resultRow = table.Rows["I need row index. But I know just cell value"];
【问题讨论】:
我想按单元格值学习行索引。我知道单元格值“E003”。如何学习该行包含单元格值“E003”的行索引?我需要 7 而不是 11。
var table =TableAdapter.GetData();
var resultRow = table.Rows["I need row index. But I know just cell value"];
【问题讨论】:
基于TableAdapter Overview你可以get the underlying DataTable你想这样查询var table = TableAdapter.GetData()
以下几行显示了如何通过该行的主键查找某行的索引。首先,您从 DataTable 中获得 collection of rows,然后您可以使用 Find() 方法按给定值搜索行。
DataRowCollection rowCol = GetDataTable().Rows;
rowCol.Dump("Content for RowCollection: ");
// find row by value of primary key
// for it to work Emp_Code as to be set as primary key column
DataRow foundRow = rowCol.Find("E003");
int indexOfRow = rowCol.IndexOf(foundRow);
indexOfRow.Dump("zero based RowIndex is: ");
基础数据与您的屏幕截图类似
private DataTable GetDataTable()
{
DataTable table = new DataTable("NameIsOptional");
table.Columns.Add(new DataColumn("Emp_Id", typeof(int)));
table.Columns.Add(new DataColumn("Emp_Code", typeof(string)));
table.Columns.Add(new DataColumn("L_Name", typeof(string)));
// set Column 'Emp_Code' as primary key column
table.PrimaryKey = new DataColumn[] {table.Columns["Emp_Code"]};
table.Rows.Add(1, "E001", "dave");
table.Rows.Add(2, "E002", "mandle");
table.Rows.Add(3, "E007", "sarana");
table.Rows.Add(4, "E004", "poyekar");
table.Rows.Add(5, "E005", "suryawanshi");
table.Rows.Add(9, "E006", "survey");
table.Rows.Add(11, "E003", "singh");
return table;
}
由于您对Emp_Code 列几乎没有提及,我假设它可以用作数据表的主键。
下面可以看到上面的代码在linqpad中执行
如果您不能使用Emp_Code 作为主键,您可以在问题How to find a value in DataTable in C#? 中找到您需要的信息
【讨论】:
我今天找到了一个这样的解决方案。
var table = TableAdapter.GetData().Select(s => new { s.Index })
.AsEnumerable()
.Select((s, counter) => new
{
s.Index,
counter = counter + 1
});
foreach (var item in table)
{
if (item.Index == Emp_ID)
{
//do something
break;
}
}
【讨论】:
var table = TableAdapter.GetData() 返回一个数据表。 Select(...) 返回一个 DataRows 数组。 Select() 的参数看起来像 statement lambda s=> new { s.Index} 尽管这个 lambda 中的 new 让我感到困惑,我无法弄清楚 lambda 表达式 s => new { s.Index} 是什么类型或它做了什么。在 Linqpad 中尝试您的代码会返回错误。您能否解释一下您的答案如何适合您的问题以获取 Datagrid 的 rowIndex?