次の例では、現在の行インデックスをどのように知ることができますか?
foreach (DataRow temprow in temptable.Rows)
{
//this.text = temprow.INDEX????
}
自分で作成する必要があります
var i = 0;
foreach (DataRow temprow in temptable.Rows)
{
this.text = i;
// etc
i++;
}
または、代わりにforループを実行することもできます。
Linqを使用できる場合は、次のように実行できます。
foreach (var pair in temptable.Rows.Cast<DataRow>()
.Select((r, i) => new {Row = r, Index = i}))
{
int index = pair.Index;
DataRow row = pair.Row;
}
あなたは実際にはしません。 foreachの優れた点の1つは、増分を処理して長さをチェックする追加のコードセットがないことです。
独自のインデックスが必要な場合は、次のようなことを行う必要があります
int rowindex = 0;
foreach (DataRow temprow in temptable.Rows)
{
//this.text = temprow.INDEX????
this.text = rowindex++;
}
int rowIndex = temptable.Rows.IndexOf(temprow);
遅くなるよりはまし...
foreach (DataRow temprow in temptable.Rows)
{
temptable.Rows.IndexOf(temprow);
}
任意のセル番号を書き込み、RowIndexを取得します
foreach (var item in datagridview.Rows)
{
//TextBox1.Text= item.Cells[0].RowIndex.ToString();
}
標準のforeachループでは不可能です。最も簡単な方法は、forループを使用することです
for ( int i = 0; i < temptable.Rows.Count; i++ ) {
DataRow temprow = (DataRow)temptable.Rows[i];
...
}
別のオプションは、拡張メソッドを使用することです
public static void ForEachIndex<T>(this IEnumerable<T> e, Action<T,int> del) {
var i = 0;
foreach ( var cur in e ) {
del(cur,i);
}
}
.。
temptable.Rows.Cast<DataRow>.ForEachIndex((cur,index)
{
...
});
ねえ、私が思うはるかに速い方法があります。繰り返しは必要ありません!まず、DataRowのFriendRowIDフィールドの静的変数を宣言します。
Private Shared RowIDFieldInfo As System.Reflection.FieldInfo = GetType(DataRow).GetField("_rowID", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)
次に、それを使用するために必要なのは次のとおりです。
RowIDFieldInfo.GetValue(MyDataRow) - 1
リゾーティングまたはフィルタリングした後、これをテストしていません。私の場合、それを行う必要はないので、これは機能します。
Forループを使用するか、整数のフォローを使用します。
int count =0;
foreach (DataRow temprow in temptable.Rows)
{
//count is the index of the row in the array temptable.Rows
//this.text = temprow.INDEX????
++count;
}
標準のfor
ループを使用してインデックスを取得できます
for(int i=0; i<temptable.Rows.Count; i++)
{
var index = i;
var row = temptable.Rows[i];
}
LFSRの答えは正しいですが、ほぼすべてのコレクション/リストで.IndexOfを呼び出すと、一致する行が見つかるまでリストが列挙されると確信しています。大規模なDataTableの場合、これは遅くなる可能性があります。
テーブル上で(i = 0; i <temptable.Rows.Count; i ++){...}を実行する方がよい場合があります。そうすれば、インデックス検索税を課すことなくインデックスを取得できます。
列名を使用する代わりにインデックスを使用してデータを取得する別の方法
foreach (DataRow temprow in temptable.Rows)
{
String col1 = temprow[0].ToString().Trim();
String col2 = temprow[1].ToString().Trim();
}
お役に立てば幸いです