问题是这样的:我的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
我用下面的方法
DataGridViewComboBoxColumn cc = dataGridView1.Columns["banj"] as DataGridViewComboBoxColumn;//"banj"是学生表中的班级列。
cc.DataSource = ds.Tables[0];//班级表数据
cc.DisplayMember = "banj";//班级表中的班级名称
cc.ValueMember = "bianh";//班级表中的班级序号 dataGridView1.Columns.Add(cc);
然后绑定数据源提示错误:
---------------------------
未将对象引用设置到对象的实例。
---------------------------
并且没有显示下拉框只是多了两列班级表数据
如下图:求大神答惑!!!datagridviewcombobox
按你说的做了,并将banj列的columntype设置为DataGridViewComboBoxColumn
但是在dataGridView1.Columns.Add(cc);会抛出异常:---------------------------
提供的列已属于 DataGridView 控件。
---------------------------
如果这样写的话:
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());提示未将对象引用设置到对象的实例。
重新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