C#でカラムを操作する場合、DataGridViewコントロールを使用しますが、DataSourceプロパティを使用してデータの表示を行うと、カラム表示が簡単に実装できます。
DataSourceとして指定できるオブジェクトは、
- IList インターフェイス。(1次元配列等)
- IListSource インターフェイス。(DataTable、DataSet)
- IBindingList インターフェイス。(BindingList
等) - IBindingListView インターフェイス。(BindingSource等)
の4つです。
今回はIListSource インターフェイスのDataTableを使用した方法でカラム表示を行います。
DataTableは、表形式で複数のデータをまとめて保持できます。Columns.Addメソッドでカラムを追加し、Rows.Addメソッドで行を追加していきます。DataGridViewで表示するために、出来上がったDataTableを、DataSourceプロパティに設定します。
DataGridViewTextBoxColumnは、テキスト文字列の表示および編集を行うためのDataGridViewのセルを論理的にホストするために使用します。ここでは、列の見出しを付けるために使用しています。
DataTable dt = new DataTable(); // 3列定義します。 dt.Columns.Add("A", Type.GetType("System.String")); dt.Columns.Add("B", Type.GetType("System.Int32")); dt.Columns.Add("C", Type.GetType("System.DateTime")); // 4行追加します。 for (int i = 0; i < 4; i++) { DataRow row = dt.NewRow(); row["A"] = "文字列を格納します。"; row["B"] = i; row["C"] = DateTime.Now; dt.Rows.Add(row); } DataGridView dataGridView1 = new DataGridView(); dataGridView1.Dock = DockStyle.Fill; //列の自動追加抑止 dataGridView1.AutoGenerateColumns = false; //データソースに上記で生成したMyRowのリストを設定 dataGridView1.DataSource = dt; //表示用カラムの生成 DataGridViewTextBoxColumn textColumnA = new DataGridViewTextBoxColumn(); DataGridViewTextBoxColumn textColumnB = new DataGridViewTextBoxColumn(); DataGridViewTextBoxColumn textColumnC = new DataGridViewTextBoxColumn(); //A,B,Cという名前でDataTableの列にそれぞれアクセスする textColumnA.DataPropertyName = "A"; textColumnA.HeaderText = "カラムA"; dataGridView1.Columns.Add(textColumnA); textColumnB.DataPropertyName = "B"; textColumnB.HeaderText = "カラムB"; dataGridView1.Columns.Add(textColumnB); textColumnC.DataPropertyName = "C"; textColumnC.HeaderText = "カラムC"; dataGridView1.Columns.Add(textColumnC); this.ClientSize = new Size(300, 150); this.Controls.Add(dataGridView1); // 5行目に追加します。 DataRow addrow = dt.NewRow(); addrow["A"] = "文字列を格納します。"; addrow["B"] = 4; addrow["C"] = DateTime.Now; dt.Rows.Add(addrow);
DataTableを使用すると、データの編集、行の削除・追加を行うことができます。
データの編集は、次に示すようにテーブルの何行目の何列目かを指定します。
dt.Rows[2][“A”] = “Tomosoft”; 引数は、[RowIndex][ColumnIndex]となります
行の削除は、DataTableのRows.RemoveAtメソッド で削除する行を指定すると、 DataGridViewから指定された行が削除されます。
行の追加は、DataRowに1行分の列データを設定して、DataTableのRows.AddメソッドでDataTableに追加すると、DataGridViewに表示されます(コメント「// 5行目に追加します」以降)。