none
winform datagridview中的 combobox如何选中默认值? RRS feed

  • 问题

  • 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 的选项

    求示例代码。


    2012年10月15日 3:23

答案

  • 看了半天,我终于知道你是在添加行,并不是绑定——你是试图从数据库中逐行读取数据,然后赋值到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;
            }
        }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 曲风荷 2012年10月15日 7:18
    2012年10月15日 6:54
    版主

全部回复

  • 你缺少对下拉列表的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:图片类型一、图片类型二、图片类型三、图片类型四、图片类型五、

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年10月15日 4:20
    版主
  • 嗯,已经修改。 改为 

    CategoryCode 了

    那么选中默认值该如何写呢?

    2012年10月15日 4:38
  • 如果你绑定的内容包含A,B,C,D,E,应该不要写任何代码的,程序会识别的。

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年10月15日 4:53
    版主
  • 如果你绑定的内容包含A,B,C,D,E,应该不要写任何代码的,程序会识别的。

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    没有识别出来。第一列 TextBoxColumn 为A ,第二列 
    ComboBoxColumn 虽然下拉列表已经有值了,但是默认选中的都是空值,没有选中 A 对应的选项
    2012年10月15日 5:00
  • 你绑定了数据源吗?还是说新增加记录?

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年10月15日 5:06
    版主
  • 绑定值。

    Datagridview绑定来源于“select  x.PicType as '图片类型',x.PicType as '编辑' FROM X”

    Combobox绑定来源于“Select  CategoryCode,CategoryName from c”

    其中 x中的PicType对应于 C中的 CategoryCode,我想要的效果是:gridview一加载,Combox就根据PicType自动绑定好了对应的CategoryCode。

    即如果Pictype = A,则 Combox 显示 “图片类型一”,B 显示 “图片类型二”

    2012年10月15日 5:15
  • 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表。


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年10月15日 5:48
    版主
  • 显示结果如下:

    代码

    显示结果

    2012年10月15日 6:28
  • 看了半天,我终于知道你是在添加行,并不是绑定——你是试图从数据库中逐行读取数据,然后赋值到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;
            }
        }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 曲风荷 2012年10月15日 7:18
    2012年10月15日 6:54
    版主
  • 看了半天,我终于知道你是在添加行,并不是绑定——你是试图从数据库中逐行读取数据,然后赋值到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;
            }
        }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    谢谢,按照你的说明终于搞定了
    2012年10月15日 7:17