web-dev-qa-db-ja.com

DataRowのDataColumn名(DataTableではない)

特定の行の列名と列のデータ型を繰り返す必要があります。私が見たすべての例は、データテーブル全体を反復しています。単一の行を関数に渡して、一連の条件付き処理を行いたいです。読みやすくするために、条件付き処理を分離したいと思います。

これは私が持っているものです:

private void doMore(DataRow dr)
{
    foreach (DataColumn c in dr.ItemArray)  //loop through the columns. 
    {
        MessageBox.Show(c.ColumnName.ToString());
    }
}

返されるエラーは

System.InvalidCastException:タイプ「System.String」のオブジェクトをタイプ「System.Data.DataColumn」にキャストできません。

行から列名を取得するにはどうすればよいですか、データテーブル全体を関数に渡す必要がありますか?

40
James Dean

それでもDataTableクラスを通過する必要があります。ただし、 DataRow プロパティを使用して、Tableインスタンスを使用してこれを行うことができます。

foreach (DataColumn c in dr.Table.Columns)  //loop through the columns. 
{
    MessageBox.Show(c.ColumnName);
}
72
Daniel Hilgarth

DataRowオブジェクトで次のような拡張機能を使用すると、コードで簡単に実行できます(とにかくこれを多く行う場合)。

static class Extensions
{
    public static string GetColumn(this DataRow Row, int Ordinal)
    {
        return Row.Table.Columns[Ordinal].ColumnName;
    }
}

次に、次を使用して呼び出します。

string MyColumnName = MyRow.GetColumn(5);
10
Rob Hardy

次のようなものが必要です。

foreach(DataColumn c in dr.Table.Columns)
{
  MessageBox.Show(c.ColumnName);
}
5
Mark Harrell