在运行时期间将项添加到DataGridView中的DataGridViewComboBoxColumn

我正在使用DataGridViewComboBoxColumn列创建DataGridView。 最初,combobox项目使用Items.Add(“sometext”)填充值。

在DataGridView的EditingControlShowing事件中返回的DataGridViewComboBoxEditingControl中添加了更多值。

此后我可以正确选择最初添加的值,但是如果我尝试选择一个稍后添加的消息“DataGridViewComboBoxCell值无效”的exception。 被抛出。

有什么想法吗?

您需要处理ComboBoxValidating事件,然后将其添加到那里。 这是一些代码:

private void HandleEditShowing( object sender, DataGridViewEditingControlShowingEventArgs e) { var cbo = e.Control as ComboBox; if (cbo == null) { return; } cbo.DropDownStyle = ComboBoxStyle.DropDown; cbo.Validating -= HandleComboBoxValidating; cbo.Validating += HandleComboBoxValidating; } private void HandleComboBoxValidating(object sender, CancelEventArgs e) { var combo = sender as DataGridViewComboBoxEditingControl; if (combo == null) { return; } //check if item is already in drop down, if not, add it to all if (!combo.Items.Contains(combo.Text)) { var comboColumn = this.dataGridView1.Columns[ this.dataGridView1.CurrentCell.ColumnIndex] as DataGridViewComboBoxColumn; combo.Items.Add(combo.Text); comboColumn.Items.Add(combo.Text); this.dataGridView1.CurrentCell.Value = combo.Text; } } 

因此,当您处理EditingControlShowing事件时,请挂钩到combobox的Validating事件。 然后,一旦用户将一些文本输入DataGridViewcombobox并从中弹出选项卡,该事件就会触发。 此时,您需要将其添加到combobox本身以及实际的DataGridViewColumn中,以便DataGridView中的所有其他行都具有该值。

试试这个,

 DataGridViewComboBoxColumn Column_ModemList = (DataGridViewComboBoxColumn)this.DGV_Groups.Columns["DGV_Groups_ModemList"]; Column_ModemList.Items.Add(l_modem_str); 

注意:将AllowUserToAddRows属性设置为false