私は列名でDataRowのセルの値を設定するコードがあります.
row["ColumnName"] = someValue;
上記の行のすぐ右側の列に、この行の値も設定したいと思います。明らかに、列名ではなくインデックスでセルを取得する場合、これは簡単です。したがって、列名から列インデックスを取得して、私ができるようにする方法があります:
row[index + 1] = someOtherValue;
つまり、テーブルを最初に作成するときに、列インデックスと列名のディクショナリを作成する必要がありますか、またはこれを行わずに後で列名からインデックスを取得できますか?
DataColumn.Ordinal
は、DataTable
の列のインデックスを取得します。したがって、前述のように次の列が必要な場合は、Column.Ordinal + 1
:
row[row.Table.Columns["ColumnName"].Ordinal + 1] = someOtherValue;
これを試して:
int index = row.Table.Columns["ColumnName"].Ordinal;
DataColumnCollection.IndexOf を使用するだけです
必要な列のインデックスを名前で取得し、それを行で使用できるようにするには:
row[dt.Columns.IndexOf("ColumnName")] = columnValue;
列名を介してオブジェクトを取得する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);
}