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

2020年2月19日

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

「dt.Rows.IndexOf(DataRow)」を使用して、

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

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

IndexOf(DataRow)のDataRowに

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


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

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

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

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

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

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

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


        private void DataTable_Get_Row_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");

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

まとめ

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

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

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

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

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


Microsoft 公式ページ

DataRowCollection.IndexOf(DataRow) メソッド
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datarowcollection.indexof?view=netframework-4.8


お問い合わせ先

Twitterの利用再開しましたのでお問い合わせのある方はTwitterまでご連絡ください。