50

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

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

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' にキャストできません。

行から列名を取得するにはどうすればよいですか、それとも選択の余地がなく、データテーブル全体を関数に渡す必要がありますか?

4

4 に答える 4

83

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

foreach (DataColumn c in dr.Table.Columns)  //loop through the columns. 
{
    MessageBox.Show(c.ColumnName);
}
于 2012-10-10T15:49:30.490 に答える
13

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

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

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

string MyColumnName = MyRow.GetColumn(5);
于 2012-10-10T16:10:10.487 に答える
5

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

foreach(DataColumn c in dr.Table.Columns)
{
  MessageBox.Show(c.ColumnName);
}
于 2012-10-10T15:51:22.700 に答える
-5

代わりに DataTable オブジェクトを使用します。

 private void doMore(DataTable dt)
    {
    foreach(DataColumn dc in dt.Columns)
    {
    MessageBox.Show(dc.ColumnName);
    }
    }
于 2012-10-10T15:50:00.740 に答える