【C#】データテーブルの列インデックスを取得する【DataTable】

列インデックスを取得する

「dt.Columns.IndexOf(DataColumn)」を使用して、

データテーブルに格納されている列の位置を知る事ができます。

DataColumnは取得できているけど、どの位置、何列目にあるのかを知りたいときに活用できます。

IndexOf(DataColumn)のDataColumnに

取得済みのDataColumnを受け渡すことで、戻り値として列インデックスが返ってきます。


    // データテーブルの初期化
    DataTable dt = new DataTable();

    // データテーブルの名前を指定
    dt.TableName = "FRUIT";

    // 列追加
    dt.Columns.Add("HINMEI");
    dt.Columns.Add("SURYO");
    dt.Columns.Add("TANKA");
    dt.Columns.Add("KINGAKU");
    // 行追加
    dt.Rows.Add("りんご", "3", "50", "150");
    dt.Rows.Add("ぶどう", "1", "200", "200");
    dt.Rows.Add("みかん", "10", "30", "300");

    /* 
      今回の内容はここから
    */ 
    // 行インデックスを取得する
    DataColumn dc = dt.Columns[2];
    Console.WriteLine(dt.Columns.IndexOf(dc));
    
    // ログ出力内容
    // 2


コピペですぐ試せるソースコード

今回は、まとめる必要がありませんでしたが、メソッド形式のソースコードも記載したいので載せます。

ソースコードをコピペするとそれぞれの動作が確認できると思います。


        private void DataTable_Get_Column_Index()
        {
            DataTable dt = new DataTable();

            // データテーブルの名前を指定
            dt.TableName = "FRUIT";

            // 列追加
            dt.Columns.Add("HINMEI");
            dt.Columns.Add("SURYO");
            dt.Columns.Add("TANKA");
            dt.Columns.Add("KINGAKU");
            // 行追加
            dt.Rows.Add("りんご", "3", "50", "150");
            dt.Rows.Add("ぶどう", "1", "200", "200");
            dt.Rows.Add("みかん", "10", "30", "300");

            /* 
              今回の内容はここから
            */ 
            // 行インデックスを取得する
            DataColumn dc = dt.Columns[2];
            Console.WriteLine(dt.Columns.IndexOf(dc));
    
            // ログ出力内容
            // 2
        }


まとめ

列インデックスの取得がIndexOfを使う事で簡単にできます。

これを知らない間はループ処理をして

条件に該当する列を列インデックスとして判断してたりしていました。

列インデックスを取得する機会は多々あると思うので、

IndexOfを積極的に使って無駄な処理を省いていけるようにしたいと思います。


Microsoft 公式ページ

DataColumnCollection.IndexOf メソッド
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datacolumncollection.indexof?view=netframework-4.8