积极答复者
winform datagridview中的 combobox如何选中默认值?

问题
-
Datagridview 采用动态添加列的方法 绑定了一个 Combobox列。代码如下:
//图片类型值为:A B C D E
DataGridViewTextBoxColumn dc = new DataGridViewTextBoxColumn();
dc.DataPropertyName = "图片类型";
dc.HeaderText = "图片类型";
dc.ReadOnly = true;
dgwPics.Columns.Add(dc);
DataGridViewComboBoxColumn dcb = new DataGridViewComboBoxColumn();
dc.DataPropertyName = "编辑";
dcb.HeaderText = "编辑";
dcb.DataSource = cm.GetEntityByCode("FlowerType");
dcb.ValueMember = "CategoryCode"; //值:A、B、C、D、E
dcb.DisplayMember = "CategoryName"; //对应ABCDE:图片类型一、图片类型二、图片类型三、图片类型四、图片类型五、
dgwPics.Columns.Add(dcb);要求:
当 图片类型 列为 A 的时候,下拉框列 自动选中:值为 A 的选项
求示例代码。
答案
-
看了半天,我终于知道你是在添加行,并不是绑定——你是试图从数据库中逐行读取数据,然后赋值到Combobox中,对不?请不要这样做!请直接把DataTable作为数据源赋值给GridView!
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Rows.Add(1, "内容1"); dt.Rows.Add(2, "内容2"); DataGridViewComboBoxColumn c = new DataGridViewComboBoxColumn(); c.DataSource = dt; c.DisplayMember = "Name"; c.ValueMember = "Id"; c.DataPropertyName = "Id"; dataGridView1.Columns.Add(c); //模拟数据库内容! DataTable dt2 = new DataTable(); dt2.Columns.Add("Id", typeof(int)); for (int i = 1; i < 11; i++) { dt2.Rows.Add(i % 2 == 0 ? 1 : 2); } dataGridView1.DataSource = dt2; } }
- 已标记为答案 曲风荷 2012年10月15日 7:18
全部回复
-
你缺少对下拉列表的DataPropertyType的绑定,注意下划线部分!
你的DataPropertyName应该是ValueMember其中之一。
DataGridViewComboBoxColumn dcb = new DataGridViewComboBoxColumn(); dcb.DataPropertyName = "编辑"; dcb.HeaderText = "编辑"; dcb.DataSource = cm.GetEntityByCode("FlowerType"); dcb.ValueMember = "CategoryCode"; //值:A、B、C、D、E dcb.DisplayMember = "CategoryName"; //对应ABCDE:图片类型一、图片类型二、图片类型三、图片类型四、图片类型五、
-
-
DataGridViewComboBoxColumn dcb = new DataGridViewComboBoxColumn();
dcb.DataPropertyName="图片类型";
dcb.HeaderText = "编辑";
dcb.DataSource = cm.GetEntityByCode("FlowerType");
dcb.ValueMember = "CategoryCode"; //值:A、B、C、D、E
dcb.DisplayMember = "CategoryName"; //对应ABCDE:图片类型一、图片类型二、图片类型三、图整个DataGridView请绑定到X表。
-
看了半天,我终于知道你是在添加行,并不是绑定——你是试图从数据库中逐行读取数据,然后赋值到Combobox中,对不?请不要这样做!请直接把DataTable作为数据源赋值给GridView!
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Rows.Add(1, "内容1"); dt.Rows.Add(2, "内容2"); DataGridViewComboBoxColumn c = new DataGridViewComboBoxColumn(); c.DataSource = dt; c.DisplayMember = "Name"; c.ValueMember = "Id"; c.DataPropertyName = "Id"; dataGridView1.Columns.Add(c); //模拟数据库内容! DataTable dt2 = new DataTable(); dt2.Columns.Add("Id", typeof(int)); for (int i = 1; i < 11; i++) { dt2.Rows.Add(i % 2 == 0 ? 1 : 2); } dataGridView1.DataSource = dt2; } }
- 已标记为答案 曲风荷 2012年10月15日 7:18
-
看了半天,我终于知道你是在添加行,并不是绑定——你是试图从数据库中逐行读取数据,然后赋值到Combobox中,对不?请不要这样做!请直接把DataTable作为数据源赋值给GridView!
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Rows.Add(1, "内容1"); dt.Rows.Add(2, "内容2"); DataGridViewComboBoxColumn c = new DataGridViewComboBoxColumn(); c.DataSource = dt; c.DisplayMember = "Name"; c.ValueMember = "Id"; c.DataPropertyName = "Id"; dataGridView1.Columns.Add(c); //模拟数据库内容! DataTable dt2 = new DataTable(); dt2.Columns.Add("Id", typeof(int)); for (int i = 1; i < 11; i++) { dt2.Rows.Add(i % 2 == 0 ? 1 : 2); } dataGridView1.DataSource = dt2; } }