问题是这样的:我的DataGridView绑定的数据源是个学生表,其中的班级列保存的是班级序号,我现在想将这一列显示成从班级表中获取的班级名称,并且用下拉框显示。
我用下面的方法
DataGridViewComboBoxColumn cc = dataGridView1.Columns["banj"] as DataGridViewComboBoxColumn;//"banj"是学生表中的班级列。
cc.DataSource = ds.Tables[0];//班级表数据
            cc.DisplayMember = "banj";//班级表中的班级名称
            cc.ValueMember = "bianh";//班级表中的班级序号            dataGridView1.Columns.Add(cc);
然后绑定数据源提示错误:
---------------------------
未将对象引用设置到对象的实例。
---------------------------
并且没有显示下拉框只是多了两列班级表数据
如下图:求大神答惑!!!datagridviewcombobox

解决方案 »

  1.   

    首先把this.dataGridView1.AutoGenerateColumns = false;//自动生成列关闭。然后确保你手动添加的banj这一列是一个combobox类型。
      

  2.   


    按你说的做了,并将banj列的columntype设置为DataGridViewComboBoxColumn
    但是在dataGridView1.Columns.Add(cc);会抛出异常:---------------------------
    提供的列已属于 DataGridView 控件。
    ---------------------------
      

  3.   

    refer:http://social.microsoft.com/Forums/en-US/795a2558-3d5d-4b1d-a0fe-12a447ec19a5/winform-datagridview-combobox
      

  4.   


    如果这样写的话:
                DataTable dt = new DataTable();
                dt.Columns.Add("Id", typeof(string));
                dt.Columns.Add("Name", typeof(string));
                dt.Rows.Add("001", "一班");
                dt.Rows.Add("002", "二班");
                DataGridViewComboBoxColumn c = new DataGridViewComboBoxColumn();            c.DataSource = dt;
                c.DisplayMember = "Name";
                c.ValueMember = "Id";
                c.DataPropertyName = "banj";
                dataGridView1.Columns.Add(c);
    显示正常,
    但是将上面的dt的数据源改为从数据库获取,就会出现如图的结果:而且下拉框也不能修改,如果点击下拉框会在program.cs的Application.Run(new DataGridViewSample());提示未将对象引用设置到对象的实例。
      

  5.   

    问题已经解决了,上面的方法都没有问题,是因为我的下拉框和datagridview的数据源,用了同一个DataSet,
    重新new了一个DataSet后,就没问题了。ps:上面的方法是在没有编辑列的情况下使用的,如果已经添加了编辑列,比如:设置列的Name是banji,DataPropertyName位"banj", ColumnType为combobox类型,则可以用以下的方法。this.banji.DataSource=dt;//dt为DataTable对象
    this.banji.DisplayMember="banj";//班级名称
    this.banji.ValueMember="bianh";//编号//一定要在绑定datagridview之前绑定下拉框非常感谢@guwei4037、@men52676521