@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

C# ComboBox列が含まれるDataGridViewをコードから作成する方法

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 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("女性");
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-05-20 00:59
DataSource プロパティに設定したときに、勝手に列が追加されるのは
DataGridView の AutoGenerateColumns プロパティが true に設定されているからです。
これが true になっていると、バインドされたデータソースの内容に応じて、
必要な列が自動的に追加されます。
これを false にすると、自動的に列が追加されませんので、DataGridViewComboBoxColumn をコードで追加し、
列の DataPropertyName プロパティにバインドしたい列名を設定すれば可能です。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)