1

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

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

但结果总是1但不是完全匹配的行号。

4

2 回答 2

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; });
}
于 2012-11-03T11:45:12.783 回答
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();

顺便说一句,它是什么类型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);
于 2012-11-03T11:21:39.813 回答