根据DataTable中的值检索行号

时间:2012-11-03 11:15:33

标签: c# asp.net

我想知道确切的行号,我正在使用此代码

DataRow[] resultsize = dt.Select("psize like '%" + hdncurrentsize.Value + "%'");

但结果始终为1,但不是完全匹配的行号。

2 个答案:

答案 0 :(得分:3)

如果您有兴趣知道行位置,可以试试这个

DataRow[] resultsize = dt.Select("psize like '%" + hdncurrentsize.Value + "%'");

foreach(var row in resultsize){    
   var idx = dt.Rows.IndexOf<DataRow>(row);    
}

或者

DataRow[] allRows;    
dt.Rows.CopyTo(allRows,0);

foreach(var row in resultsize){    
   var idx = Array.FindIndex<DataRow>
                   (allRows, (item) => { return item == row; });
}

答案 1 :(得分:1)

您的代码似乎是正确的。为什么你确定,返回的行数是错误的?

此外,您可以使用Linq to DataSet过滤行(它将与您的DataTable.Select相同,但更具可读性的强类型方式)

var rows = from row in dt.AsEnumerable()
           where row.Field<string>("psize").Contains(hdncurrentsize.Value)
           select row;

int resultSize = rows.Count();

BTW 什么类型有hdncurrentsize.Value它是一个字符串(我认为是)?

UPDATE 因此您正在搜索行索引(下面的代码只会循环数据表一次,而不会在过滤后搜索每个找到的行的索引):

var indexes = dt.AsEnumerable()
                .Select((row, index) => new { row, index })
                .Where(x => x.row.Field<string>("psize").Contains(hdncurrentsize.Value))
                .Select(x => x.index);
相关问题