DataGridViewComboBoxColumn的使用和其他方式的实现

原创 2011年03月17日 16:44:00

DataGridViewComboBoxColumn这个东西初次看见的时候以为是个特别方便的方式在DataGridView中显示下拉框,结果盲目的试了半天也无法让程序运行起来.

网上的例子试了好多个,也不明白.结果才在msdn的一个相关话题中找到个例子,算是明白了.

 

msdn链接:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridviewcolumn.datapropertyname(v=vs.80).aspx#Y129

 

摘录 一段明显的代码:

private void EnumsAndComboBox_Load(object sender, System.EventArgs e)
{
    // Populate the data source.
    bindingSource1.Add(new Knight(Title.King, "Uther", true));
    bindingSource1.Add(new Knight(Title.King, "Arthur", true));
    bindingSource1.Add(new Knight(Title.Sir, "Mordred", false));
    bindingSource1.Add(new Knight(Title.Sir, "Gawain", true));
    bindingSource1.Add(new Knight(Title.Sir, "Galahad", true));

    // Initialize the DataGridView.
    dataGridView1.AutoGenerateColumns = false;
    dataGridView1.AutoSize = true;
    dataGridView1.DataSource = bindingSource1;

    dataGridView1.Columns.Add(CreateComboBoxWithEnums());

    // Initialize and add a text box column.
    DataGridViewColumn column = new DataGridViewTextBoxColumn();
    column.DataPropertyName = "Name";
    column.Name = "Knight";
    dataGridView1.Columns.Add(column);

    // Initialize and add a check box column.
    column = new DataGridViewCheckBoxColumn();
    column.DataPropertyName = "GoodGuy";
    column.Name = "Good";
    dataGridView1.Columns.Add(column);

    // Initialize the form.
    this.Controls.Add(dataGridView1);
    this.AutoSize = true;
    this.Text = "DataGridView object binding demo";
}

DataGridViewComboBoxColumn CreateComboBoxWithEnums()
{
    DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
    combo.DataSource = Enum.GetValues(typeof(Title));
    combo.DataPropertyName = "Title";
    combo.Name = "Title";
    return combo;
}

private class Knight
{
    private string hisName;
    private bool good;
    private Title hisTitle;

    public Knight(Title title, string name, bool good)
    {
        hisTitle = title;
        hisName = name;
        this.good = good;
    }

.....这种类就很明显理解了.

重点注意的一个地方就是设置dataGridView为非自动添加列的,否则绑定数据源后,会自动生成列.

这里的做法就是绑定数据源,但是让它不自动生成,代替用手工添加dataGridView中的列,并设置列需要映射到数据源的哪个字段上.

 

2.网上看到个非数据绑定的做法,非常的自定义,用起来应该很方便,就是代码量上可能多了些.

地址:http://www.cnblogs.com/luqingfei/archive/2007/03/28/691372.html

 

 

贴上自己从datatable绑定成功的第一个例子.

 

数据库的表很简单:一个简单的左链接,将状态的字段链接进来.

CREATE TABLE [dbo].[order_info](
 [order_id] [bigint] NOT NULL,
 [user_id] [bigint] NOT NULL,
 [item_name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
 [item_price] [money] NULL,
 [order_state_id] [smallint] NULL,

 

CREATE TABLE [dbo].[order_state](
 [order_state_id] [smallint] NULL,
 [order_state_name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

 

 

 

 

private void initData()
        {
            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.AutoGenerateColumns = false;

            string sql1 = @"SELECT order_state.order_state_id, order_info.order_id
FROM      order_info LEFT OUTER JOIN
            order_state ON order_info.order_state_id = order_state.order_state_id";
            string sql2 = @"SELECT   order_state_name, order_state_id
FROM      order_state";

            DataTable dt = GetTable(sql1);
            dataGridView1.DataSource = dt;//一定要在dgvComboBoxColumn的DataSource后设置


            DataGridViewComboBoxColumn dgvComboBoxColumn = new DataGridViewComboBoxColumn();//dataGridView1.Columns[0] as DataGridViewComboBoxColumn;
            dgvComboBoxColumn.DataPropertyName = "order_state_id";
            dgvComboBoxColumn.DataSource = GetTable(sql2).DefaultView;//必须在设置dataGridView1的DataSource的属性前设置
            dgvComboBoxColumn.DisplayMember = "order_state_name";
            dgvComboBoxColumn.ValueMember = "order_state_id";

            dataGridView1.Columns.Add(dgvComboBoxColumn);

            DataGridViewColumn col = new DataGridViewTextBoxColumn();
            col.DataPropertyName = "order_id";
            col.Name = "order_id";
           
           
            dataGridView1.Columns.Add(col);
           

          

           
            Console.WriteLine("colcount={0} name={1}", dataGridView1.ColumnCount,dataGridView1.Columns[0].Name);

        }

        private DataTable GetTable(string sql)
        {
            String constr = "Data Source=ZGC-20110302GHR//SQLEXPRESS;Initial Catalog=DbTest;User ID=sa;Password=java";
            using (SqlConnection sqlconn = new SqlConnection(constr))
            {
                DataTable dt = new DataTable();
                SqlDataAdapter sqlda = new SqlDataAdapter(sql, sqlconn);
                sqlda.Fill(dt);
                return dt;
            }
        }

【转】DataGridViewComboBoxColumn的使用

本文转自:http://www.cnblogs.com/perfect/archive/2008/06/10/1216591.htmlusing System;using System.Colle...
  • freeliver54
  • freeliver54
  • 2009年10月27日 08:09
  • 2477

DataGridView嵌入comboBox以及DataGridViewComboBoxColumn数据绑定

我们在客户端程序的设计中经常会用到组合下拉框,就像这种情况 我在项目中想用datagridview来实现这种功能,看了若干博客,msdn也翻了半天,终于有了一点理解。 这里有几个关键点: 1...
  • u013992365
  • u013992365
  • 2017年01月09日 20:26
  • 4663

DataGridViewComboBoxColumn的使用和其他方式的实现

DataGridViewComboBoxColumn这个东西初次看见的时候以为是个特别方便的方式在DataGridView中显示下拉框,结果盲目的试了半天也无法让程序运行起来.网上的例子试了好多个,也...
  • yuri99
  • yuri99
  • 2011年03月17日 16:44
  • 9764

DataGridViewComboBoxColumn的使用示例

http://blog.csdn.net/yuri99/article/details/6256755 msdn链接:http://msdn.microsoft.com/zh-cn/library/...
  • xxy0403
  • xxy0403
  • 2016年05月23日 14:32
  • 720

如何能让datagridviewcomboboxcolumn可选可编辑(winform)

最简单的方法,让datagridviewcomboboxcolumn可选可编辑(winform)
  • uflswe
  • uflswe
  • 2015年04月20日 21:41
  • 2058

DataGridView中comboBox(DataGridViewComboBoxColumn)的数据绑定

DataGridView已经绑定了一个DataTable用来显示数据,其中的comboBox也要绑定一个DataTable用来实现下拉框选择数据。代码如下: dataGridView1.Columns...
  • hejialin666
  • hejialin666
  • 2009年12月19日 10:42
  • 7338

关于datagridviewComboBoxColumn

小女子昨天做东东的时候用到datagridview中的ComboBoxColumn 但是怎么弄都选不中 当然啦 主要还是俺接触的少 遇到了这个问题没头绪 end发现原来犯了一个根本的小小的错误 Dat...
  • TiramisuH
  • TiramisuH
  • 2010年01月13日 10:57
  • 474

winform dataGridView DataGridViewComboBoxColumn 下拉框事件代码

有一个dataGridView ,有一列是DataGridViewComboBoxColumn 。我用动态绑定,在绑定数据的时候。我们也给这一列绑定数据 在dataGridView的Ro...
  • xxy0403
  • xxy0403
  • 2016年05月25日 10:45
  • 1582

Datagridview控件实现下拉列表(DataGridViewComboBoxColumn)

Datagridview控件实现下拉列表(DataGridViewComboBoxColumn)
  • mamawoshizheng
  • mamawoshizheng
  • 2016年04月14日 15:56
  • 128

winfrom表格DataGridView下拉框DataGridViewComboBoxColumn选择事件

1、列的ColumnType选择:DataGridViewComboBoxColumn; 2、表格的属性EditMode设置为EditOnEnter; 3、表格添加EditingControl...
  • xiaoyu812289718
  • xiaoyu812289718
  • 2014年12月20日 15:17
  • 2624
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DataGridViewComboBoxColumn的使用和其他方式的实现
举报原因:
原因补充:

(最多只允许输入30个字)