C# を使用して DataGridView に行を追加する

Abdul Mateen 2024年2月16日
  1. C#DataGridView
  2. C#DataGridView に行を追加する
C# を使用して DataGridView に行を追加する

この記事では、C# の DataGridView について学習します。 まず、DataGridView と、なぜテーブル、つまり行と列にデータを格納する必要があるのかについて考えてみましょう。

次に、グリッドに行を追加するさまざまな方法について説明します。

これまで、ほとんどの開発者はデータをファイルに保存していました。 必要なときはいつでも、すべてのファイルを順番に検索する必要があり、時間がかかりました。

テーブルは、この問題を解決するために考案されました。

テーブルでは、データは行と列に順番に整理された方法で格納されます。 テーブルは、時間をかけずに、行と列をすばやく効率的に読みやすくします。

グリッドは、セル、つまり行と列の形式の表の形式でもあります。

C#DataGridView

Visual Studio 2008 には、Windows フォーム コントロールで利用できる DataGridView コントロールがあります。 このコントロールは、以前のバージョンと比較して、データを管理するための広範な機能を追加しました。

このコントロールは、強度に加えて、行と列の形式でデータを表示する柔軟性を提供します。

DataGridView コントロールを使用して、少量のデータの読み取り専用ビューを表示できます。 大規模なデータ セットに使用して、編集可能なビューを表示することもできます。

大小のデータ セットに加えて、このコントロールを使用してマスターの詳細を表示することもできます。

DataGridView コントロールは、ビューおよび編集用のさまざまなデータ ソースで使用できます。 このコントロールには、このコントロールにデータをバインドするためのシンプルで直感的な方法があります。

複数のテーブルをデータ ソースにバインドするには、DataMember のプロパティに文字列として設定します。

DataGridView コントロールは、次のインターフェイスを実装する任意のクラス インスタンスにバインドします。

  1. IList インターフェイスには 1 次元配列も含まれます。
  2. IListSource インターフェイス。 例として、DataSet クラスと DataTable があります。
  3. BindingList<(Of <(T>)>) クラスのような IBindingList インターフェイス。
  4. BindingSource クラスと同様の IBindingListView インターフェイス。

DataGridView コントロールは、上記のインターフェイスによって記述されたオブジェクトのパブリック属性にデータをバインドできます。 DataGridView コントロールは主に BindingSource をアタッチしますが、BindingSource は別の参照データ ソースまたはビジネス オブジェクトにバインドされます。

このコントロールは、ICustomTypeDescriptor インターフェイスによって返されるプロパティ コレクションへのデータ バインディングもサポートします。

C# の DataGridView は、データをカスタマイズ可能なグリッド、つまり Windows フォームを使用した表形式で表示します。 System.Windows.Forms 名前空間の一部です。

グリッドを使用する構文を以下に示します。

[System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")]
[System.Windows.Forms.Docking(System.Windows.Forms.DockingBehavior.Ask)]
public class DataGridView : System.Windows.Forms.Control, System.ComponentModel.ISupportInitialize

DataGridView クラスを使用して、セル、行、列、および境界線をカスタマイズできます。 DataGridView コントロールは、データ ソースの有無にかかわらずデータを表示します。

それでもデータ ソースを提供する必要がある場合は、行と列のプロパティによって DataGridView に行と列を追加できます。 DataGridView rows および cols オブジェクトを使用して行と列のコレクションにアクセスすることもできます。

この記事では、主にデータ グリッド ビューに行を追加することに焦点を当てているため、いくつかの方法を見つけてみましょう。

C#DataGridView に行を追加する

DataGridView に行を追加する複数の方法について説明します。 各方法でコーディングの詳細を示します。

行の手動追加

DataGridView に行を追加する最も簡単な方法は、データ グリッド ビューで Rows.Add() メソッドを使用して手動で行うことができます。 次の例では、MyForm.cs クラスで、行を表示する add_Data ボタン関数が記述されています。

グリッドとグリッドを表示するボタンを使用して、WPF FormDesign でフォーム デザインを作成できます。

using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Manual_Addition_of_Rows_Datagrid {
  public partial class MyForm : FormDesign {
    public MyForm() {
      IntializeComponent();
    }
    private void add_Data(object sender, EventArgs e) {
      dataGridView1.ColumnCount = 3;
      dataGridView1.Columns[0].Name = "ID";
      dataGridView1.Columns[1].Name = "Course Name";
      dataGridView1.Columns[2].Name = "Marks";

      string[] row = new string[] { "1", "OOP", "75" };
      dataGridView1.Rows.Add(row);
      row = new string[] { "2", "DSA", "86" };
      dataGridView1.Rows.Add(row);
      row = new string[] { "3", "AOA", "67" };
      dataGridView1.Rows.Add(row);
    }
  }
}

Columns コレクションを使用して DataGridView コントロールの列にアクセスし、Rows コレクションを使用して DataGridView コントロールの行にアクセスすることもできます。

DataGridView がどのデータ テーブルまたはデータ セットにもバインドされていない場合は、次のコードを使用して新しい行を追加できます。

var index = dataGridView1.Rows.Add();
dataGridView1.Rows[index].Cells["Column1"].Value = "Column1 value";
dataGridView1.Rows[index].Cells["Column2"].Value = 9.5;

新しい行を動的に追加する

次の例は、Windows アプリケーション フォーム Form1 のグリッドに列と行を動的に追加する方法を示しています。 プロジェクトを作成したら、ツールボックスから dataGridViewForm1.cs[Design] に追加し、グリッドの右上のボタンからコンテナー オプションのドックをクリックします。

Form1.cs ファイルに移動し、フォームにいくつかの変更を加えます。 まず、以下のように名前空間を追加します。

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AddingRowsColumnsInGrid {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }
    public void updateGrid() {
      // Update the data grid view here dynamically
      // Add columns
      dataGridView1.ColumnCount = 4;
      dataGridView1.Columns[0].Name = "Bus Id";
      dataGridView1.Columns[1].Name = "Bus Name";
      dataGridView1.Columns[2].Name = "Bus Model";
      dataGridView1.Columns[3].Name = "Bus Color";

      // Now adding rows
      ArrayList arrRow = new ArrayList();
      arrRow.Add("1");
      arrRow.Add("School bus");
      arrRow.Add("2000");
      arrRow.Add("Yellow");
      dataGridView1.Rows.Add(arrRow.ToArray());

      arrRow = new ArrayList();
      arrRow.Add("2");
      arrRow.Add("Speedo bus");
      arrRow.Add("2014");
      arrRow.Add("Red");
      dataGridView1.Rows.Add(arrRow.ToArray());

      arrRow = new ArrayList();
      arrRow.Add("3");
      arrRow.Add("Metro bus");
      arrRow.Add("205");
      arrRow.Add("Orange");
      dataGridView1.Rows.Add(arrRow.ToArray());
    }
    private void Form1_Load_1(object sender, EventArgs e) {
      updateGrid();
    }
  }
}

上記のコードでは、フォーム コンポーネントを初期化し、Form1_Load_1 関数を作成してグリッドで発生したオブジェクトとイベントを処理し、列と行を追加する場所に updateGrid() を渡すことがわかります。 オブジェクトをグループに格納して操作できるように、グリッド内の行が ArrayList オブジェクトに追加されました。

上記のコードの出力を以下に示します。

行を動的に追加

データ テーブルを使用してグリッドに行を追加する

C# WinForm では、データをグリッドに追加する方法が複数あります。 簡単に言えば、データテーブルは主にデータベースで使用されるオブジェクトとして定義できます。

これは、行と列を持つデータベース テーブルのようなものです。 データ テーブルの詳細については、Microsoft の記事を参照してください。

以下の例では、最初にデータ テーブル オブジェクトを作成し、データ テーブルの組み込みプロパティを使用してグリッドに列と行を追加したことがわかります。 データ ソースはデータ テーブルのプロパティでもあり、主に DataGridView のデータを取得または設定するために使用されます。

テキストボックスにデータを入力した後に Add_Row を押すと、データ ソースはデータをグリッドに入力します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SampleGridData {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }
    DataTable dt = new DataTable();
    private void Form1_Load(object sender, EventArgs e) {
      dt.Columns.Add("Emp Id", typeof(int));
      dt.Columns.Add("Ename", typeof(string));
      dt.Columns.Add("Company", typeof(string));
      dt.Columns.Add("Email", typeof(string));

      dt.Rows.Add(1, "Alexa", "Apple", "alexa123@apple.io");
      dt.Rows.Add(2, "Hugh Jack", "Microsoft", "hugh345@microsoft.com");
      dt.Rows.Add(3, "Jacob", "HP", "jacob678@hp.io");
      dt.Rows.Add(4, "Ariana", "Huawive", "arina86@huaweiv.com");

      dataGridView1.DataSource = dt;
    }
    private void button1_Click(object sender, EventArgs e) {
      dt.Rows.Add(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text);
      dataGridView1.DataSource = dt;
    }
  }
}

上記のコードの出力は次のとおりです。

フルグリッド

Clone メソッドによる行の追加

C# では、clone メソッドを使用してグリッドに行を追加できます。 クローンとは、ある DataGridView から別の DataGridView にデータをコピーして、グリッドに行と列を追加することを意味します。

その主な目的は、あるグリッドから別のグリッドにデータをコピーすることですが、行を追加できます。 例えば:

DataGridViewRow myRow = (DataGridViewRow)myGrid.Rows[0].Clone();
myRow.Cells[2].Value = "My first Grid";
myRow.Cells[4].Value = 23.5;
myGrid.Rows.Add(myRow);

上記のコードは、グリッドに追加される 1 行の値を表しています。 ただし、セル内の行の配置が改善されるため、行テンプレートを作成することもできます。

例えば:

DataGridViewRow r1 = (DataGridViewRow)myGrid1.RowTemplate.Clone();
r1.CreateCells(myGrid1, "col1", "col2", "col3");
myGrid1.Rows.Add(row);

データ グリッド ビューに行を動的に追加する方法はいくつかありますが、いくつかの例を次に示します。

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AddingRowsColumnsInGrid {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }
    public void updateGrid() {
      dataGridView1.ColumnCount = 4;
      dataGridView1.Columns[0].Name = "Bus Id";
      dataGridView1.Columns[1].Name = "Bus Name";
      dataGridView1.Columns[2].Name = "Bus Model";
      dataGridView1.Columns[3].Name = "Bus Color";

      dataGridView1.AllowUserToAddRows = true;
      DataGridViewRow row = (DataGridViewRow)dataGridView1.Rows[0].Clone();
      row.Cells[0].Value = "1";
      row.Cells[1].Value = "School bus";
      row.Cells[2].Value = "2000";
      row.Cells[3].Value = "Yellow";
      dataGridView1.Rows.Add(row);

      row = (DataGridViewRow)dataGridView1.Rows[0].Clone();
      row.Cells[0].Value = "4";
      row.Cells[1].Value = "Speedo bus";
      row.Cells[2].Value = "2014";
      row.Cells[3].Value = "Red";
      dataGridView1.Rows.Add(row);

      row = (DataGridViewRow)dataGridView1.Rows[0].Clone();
      row.Cells[0].Value = "3";
      row.Cells[1].Value = "Metro bus";
      row.Cells[2].Value = "2015";
      row.Cells[3].Value = "Orange";
      dataGridView1.Rows.Add(row);

      row = (DataGridViewRow)dataGridView1.Rows[0].Clone();
      row.Cells[0].Value = "4";
      row.Cells[1].Value = "Daewoo bus";
      row.Cells[2].Value = "2021";
      row.Cells[3].Value = "Blue";
      dataGridView1.Rows.Add(row);
    }
    private void Form1_Load_1(object sender, EventArgs e) {
      updateGrid();
    }
  }
}

理解しやすいので、この例では上記のコードを使用しました。 DataGridView では、clone プロパティを使用して行とそのプロパティをコピーし、行のコピーに元の行を入力します。

上記のコードでは、clone メソッドを使用して行をコピーしました。 clone メソッドの詳細については、この ページ にアクセスしてください。

上記のコードの出力は次のとおりです。

クローン

この ページ にアクセスして、データ グリッド ビューでの行の追加について読むことができます。 グリッドに行を追加することにまだあいまいな点がある場合は、この 記事 も読むことができます。

DataGridView について詳しく説明しました。 DataGridView にデータをバインドする複数の方法について説明しました。

データ グリッド ビューとその機能についてよく理解し、さまざまなグリッド メソッドを使用して行を追加し、そのプロパティを設定することに慣れていることを願っています。