让datagridview的DataGridviewComboBoxColumn即可以下拉,还可以输入内容
这个需求是有必要的。
勇哥参考了一些网上的资料,证明winform还是可以实现此功能的。
虽然操作上有点不太方便,比如输入内容后回车不能结束编辑,需要点内外的单元格结束编辑。
但是好歹是实现的要求,而且不用重写一些方法。
效果如下:

演示代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
BindComboxItems();
this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(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)
{
DataGridViewComboBoxColumn cboCol = (DataGridViewComboBoxColumn)grid.Columns[grid.CurrentCell.ColumnIndex];
cbo.Items.Add(value);
cboCol.Items.Add(value);
grid.CurrentCell.Value = value;
}
}
private void BindComboxItems()
{
DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn)dataGridView1.Columns[0];
col.Items.Add("");
col.Items.Add("aaa");
col.Items.Add("bbb");
col.Items.Add("ccc");
}
}代码下载:
---------------------