- - PR -
C# ComboBox列が含まれるDataGridViewをコードから作成する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-05-19 23:41
ComboBox列が含まれるDataGridViewをコードからを作成する方法を知りたいです。
DataColumn列の数や型が最初から確定している場合はデザイナーで対処できますが、 確定していない場合はDataSetもDataGridViewもコードから生成することになります。 DataGridViewをDataSetのstring列にBindするとデフォルトではDataGridViewにTextBox で列が作成されてしまいます。 TextBox列をComboBox列に変更するにはどうすれば良いでしょうか? あるいは、最初からComboBox列を作成する方法でもかまいません。 // 例 // 名簿の作成 // DataSetにBindされたDataGridViewを作成する // // DataColumnの作成 DataColumn c1 = new DataColumn("氏名",Type.GetType("System.String")); DataColumn c2 = new DataColumn("年齢", Type.GetType("System.Int32")); DataColumn c3 = new DataColumn("性別", Type.GetType("System.String")); // DataTableの作成 DataTable t = new DataTable("名簿"); t.Columns.Add(c1); t.Columns.Add(c2); t.Columns.Add(c3); // DataSetの作成 DataSet ds = new DataSet("DataSet2"); ds.Tables.Add(t); // DataGridViewの作成 DataGridView dv = new DataGridView(); // DataSetのBind dv.DataSource = ds.Tables["名簿"]; // DataGridViewのFormへの貼り付け this.Controls.Add(dv); // 下記のような選択肢を持つComboBoxをdvの"性別"列に設定したい // "不明","男性","女性"の選択肢を定義する ComboBox cb = new ComboBox(); cb.Items.Add("不明"); cb.Items.Add("男性"); cb.Items.Add("女性"); |
|
投稿日時: 2007-05-20 00:59
DataSource プロパティに設定したときに、勝手に列が追加されるのは
DataGridView の AutoGenerateColumns プロパティが true に設定されているからです。 これが true になっていると、バインドされたデータソースの内容に応じて、 必要な列が自動的に追加されます。 これを false にすると、自動的に列が追加されませんので、DataGridViewComboBoxColumn をコードで追加し、 列の DataPropertyName プロパティにバインドしたい列名を設定すれば可能です。 |
|
投稿日時: 2007-05-20 22:07
ご回答ありがとうございます。解決できました。
下記に試作したソースコードを掲載します。 private void button1_Click(object sender, EventArgs e) { // DataColumnの作成 DataColumn c1 = new DataColumn("氏名",Type.GetType("System.String")); DataColumn c2 = new DataColumn("年齢", Type.GetType("System.Int32")); DataColumn c3 = new DataColumn("性別", Type.GetType("System.String")); // DataTableの作成 DataTable t = new DataTable("名簿"); t.Columns.Add(c1); t.Columns.Add(c2); t.Columns.Add(c3); // DataSetの作成 DataSet ds = new DataSet("DataSet2"); ds.Tables.Add(t); // DataGridViewの作成 DataGridView dv = new DataGridView(); dv.AutoGenerateColumns = false; // Columnの自動生成を抑制する // DataColumnの追加 DataGridViewTextBoxColumn dc1 = new DataGridViewTextBoxColumn(); dc1.Name = "氏名"; DataGridViewTextBoxColumn dc2 = new DataGridViewTextBoxColumn(); dc2.Name = "年齢"; DataGridViewComboBoxColumn dc3 = new DataGridViewComboBoxColumn(); dc3.Name = "性別"; dv.Columns.Add(dc1); dv.Columns.Add(dc2); dv.Columns.Add(dc3); // ComboBoxの選択肢の追加 dc3.Items.Add("不明"); dc3.Items.Add("男性"); dc3.Items.Add("女性"); // DataColumnへのデータの割り付け dv.Columns["氏名"].DataPropertyName = "氏名"; dv.Columns["年齢"].DataPropertyName = "年齢"; dv.Columns["性別"].DataPropertyName = "性別"; // DataSetのBind dv.DataSource = ds.Tables["名簿"]; // DataGridViewのFormへの貼り付け this.Controls.Add(dv); // 実データの挿入 t.Rows.Add("鈴木", 33, "男性"); t.Rows.Add("田中", 20, "女性"); } |
1