49

列名で DataRow のセルの値を設定するコードがあります。

row["ColumnName"] = someValue;

上記の行のすぐ右にある列のこの行の値も設定したいと思います。明らかに、列名ではなくインデックスでセルを取得していれば、これは簡単です。列名から列インデックスを取得する方法はありますか?

row[index + 1] = someOtherValue;

つまり、テーブルを最初に作成するときに、列インデックスと列名の辞書を作成する必要がありますか、またはこれを行わずに後で列名からインデックスを取得できますか?

4

4 に答える 4

38

これを試して:

int index = row.Table.Columns["ColumnName"].Ordinal;
于 2012-07-05T08:17:25.440 に答える
9

単純にDataColumnCollection.IndexOfを使用できます

必要な列のインデックスを名前で取得し、それを行で使用できるようにします。

row[dt.Columns.IndexOf("ColumnName")] = columnValue;
于 2015-12-23T09:11:32.260 に答える
3

列名を介してオブジェクトを取得する DataRow の拡張メソッドを作成しました。

public static object Column(this DataRow source, string columnName)
{
    var c = source.Table.Columns[columnName];
    if (c != null)
    {
        return source.ItemArray[c.Ordinal];
    }

    throw new ObjectNotFoundException(string.Format("The column '{0}' was not found in this table", columnName));
}

そして、次のように呼び出されます:

DataTable data = LoadDataTable();
foreach (DataRow row in data.Rows)
{        
    var obj = row.Column("YourColumnName");
    Console.WriteLine(obj);
}
于 2014-04-28T10:43:50.620 に答える