首先从工具栏拖拽一个datagirdview然后按照图片所选进行操作
选择完之后添加成功一个带下拉框的datagirdview,然后在后台进行数据加载绑定,我这里是写了一个服务从服务器数据库获取的下拉数据
这时总共有三个框,第一个框从服务里取数据,返回一个datatable。
然后this.Analy.ValueMember设置值字段,下边设置显示字段。
再下边是把数据只取两个字段从datatable里,你也可以不这样,我只是为了明白。
然后转换成dataview类型赋值给combox我发现combox里的行类型是dataviewrow所以这样弄了一下,然后从表里取行,赋值给combox,然后现在要做下拉可编辑了
加上这一句关键的话:this.dataGridView1.EditingControlShowing += new System.Windows.Forms.DataGridViewEditingControlShowingEventHandler(this.EnabledComboBoxWrite);
然后是两个方法里代码,你自行添加修改一下就行
private void EnabledComboBoxWrite(object sender, DataGridViewEditingControlShowingEventArgs e)
{
ComboBox cb = e.Control as ComboBox;
if (cb != null)
{
cb.DropDownStyle = ComboBoxStyle.DropDown;
cb.Validating += new System.ComponentModel.CancelEventHandler(cb_Validating);
}
}
void cb_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
DataGridViewComboBoxEditingControl cbo = (DataGridViewComboBoxEditingControl)sender;
if (cbo.Text.Trim() == string.Empty) return;
DataGridView grid = cbo.EditingControlDataGridView;
object value = cbo.Text;
if (cbo.Items.IndexOf(value) == -1)
{
DataRow[] drs = Dtb_KYData3.Select("V_1_10000005='" + value+"'");
if (drs.Length > 0) return;
DataGridViewComboBoxColumn cboCol = (DataGridViewComboBoxColumn)grid.Columns[grid.CurrentCell.ColumnIndex];
DataTable dtv=Dtb_KYData3.Clone();
DataRow drv = dtv.NewRow();
DataRow drv3 = Dtb_KYData3.NewRow();
drv["V_1_10000005"] = value;
drv3["V_1_10000005"] = value;
drv["ID"] = value;
Dtb_KYData3.Rows.Add(drv3);
dtv.Rows.Add(drv);
DataView dv = new DataView(dtv);
foreach (DataRowView drvo in dv)
{
cbo.Items.Add(drvo);
cboCol.Items.Add(drvo);
grid.CurrentCell.Value = drvo;
}
}
}
}到此功能完毕下拉后输入内容会自动往下拉里添加你输入的数据
程序源码下载地址:https://download.csdn.net/download/hello_mr_anan/10633390