我正在使用DataGridViewComboBoxColumn列创建DataGridView。最初,组合框项使用Items.Add(“sometext”)填充值。
在DataGridView的EditingControlShowing事件中返回的DataGridViewComboBoxEditingControl中添加了更多值。
此后我可以正确选择最初添加的值,但是如果我尝试选择一个稍后添加的消息“DataGridViewComboBoxCell值无效”的异常。扔了。
任何想法为什么?
答案 0 :(得分:3)
您需要处理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事件时,请挂钩到组合框的Validating事件。然后,一旦用户将一些文本输入DataGridView组合框并从中弹出选项卡,该事件就会触发。此时,您需要将其添加到组合框本身以及实际的DataGridViewColumn中,以便DataGridView中的所有其他行都具有该值。
答案 1 :(得分:0)
试试这个,
DataGridViewComboBoxColumn Column_ModemList = (DataGridViewComboBoxColumn)this.DGV_Groups.Columns["DGV_Groups_ModemList"];
Column_ModemList.Items.Add(l_modem_str);
注意:将AllowUserToAddRows
属性设置为false
。