【C#】データテーブルの指定した位置に行追加する【DataTable】

指定した位置に行追加する

「dt.Rows.InsertAt(DataRow, int)」を使用して、指定した位置に行を追加します。

第一引数のDataRowには、追加するためのDataRowを用意

第二引数のintには、追加したい行の位置を指定します。

※注意

第二引数のintには、0以上を指定しないと例外エラーが発生します。

また、データテーブルの行数以上の指定は末尾に追加されることになります。

ここでは、ぶどうとみかんの間に新規行を追加しています。


    // データテーブルの初期化
    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.NewRow();
    dt.Rows.InsertAt(dr, 2);

    // データテーブルの中身
    // index:HINMEI
    // 0:りんご 
    // 1:ぶどう
    // 2:   ◇新規行
    // 3:みかん


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

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

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


        private void DataTable_Rows_InsertAt()
        {
            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.NewRow();
            dt.Rows.InsertAt(dr, 2);

            // データテーブルの中身
            // index:HINMEI
            // 0:りんご 
            // 1:ぶどう
            // 2:   ◇新規行
            // 3:みかん
        }


まとめ

グリッドの中に行追加ボタンがあって、

押されたすぐ下の行に追加しないといけないって場合には、とても便利ですね。

いちいちデータテーブルを作り直す必要がないので、

間に追加しないといけない場合にはInsertAt を活用していきましょう。


Microsoft 公式ページ

DataRowCollection.InsertAt(DataRow, Int32) メソッド

https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datarowcollection.insertat?view=netframework-4.8