正確な行番号を知りたいので、このコードを使用しています
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
の文字列ですか(私はそれだと思います)?
UPDATEしたがって、行インデックスを検索していました (以下のコードは、フィルタリング後に見つかった各行のインデックスを検索せずに、データ テーブルを 1 回だけループします)。
var indexes = dt.AsEnumerable()
.Select((row, index) => new { row, index })
.Where(x => x.row.Field<string>("psize").Contains(hdncurrentsize.Value))
.Select(x => x.index);