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の文字列ですか(私はそれだと思います)?

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);
于 2012-11-03T11:21:39.813 に答える