让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"); } }
代码下载:
---------------------
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2023-03-31 14:43:23 编辑