web-dev-qa-db-ja.com

名前付きのDataTable列のインデックスを取得します

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

row["ColumnName"] = someValue;

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

row[index + 1] = someOtherValue;

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

40
Andy

DataColumn.Ordinal は、DataTableの列のインデックスを取得します。したがって、前述のように次の列が必要な場合は、Column.Ordinal + 1

row[row.Table.Columns["ColumnName"].Ordinal + 1] = someOtherValue;
70
Tim Schmelter

これを試して:

int index = row.Table.Columns["ColumnName"].Ordinal;
30
Kell

DataColumnCollection.IndexOf を使用するだけです

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

row[dt.Columns.IndexOf("ColumnName")] = columnValue;
6
ebram khalil

列名を介してオブジェクトを取得する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);
}
3
Tom Beech