我想知道确切的行号,我正在使用此代码
DataRow[] resultsize = dt.Select("psize like '%" + hdncurrentsize.Value + "%'");
但结果总是1
但不是完全匹配的行号。
如果你有兴趣知道行位置,你可以试试这个
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; });
}
您的代码似乎是正确的。你为什么确定,返回的行数是错误的?
您也可以使用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();
顺便说一句,它是什么类型hdncurrentsize.Value
的字符串(我假设它是)?
更新因此您正在搜索行索引(下面的代码将仅循环遍历数据表一次,而不在过滤后搜索每个找到的行的索引):
var indexes = dt.AsEnumerable()
.Select((row, index) => new { row, index })
.Where(x => x.row.Field<string>("psize").Contains(hdncurrentsize.Value))
.Select(x => x.index);