我们有DataGridViewComboBoxColumn
我们有四个固定的值。在发生事件dataGridView1_EditingControlShowing
的运行时,我们尝试将新项目附加到DataGridViewComboBoxColumn
。
private void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
ComboBox combo = e.Control as ComboBox;
if (combo != null)
{
combo.DropDown += new System.EventHandler(ComboBox1_DropDown);
}
}
private void ComboBox1_DropDown(object sender, System.EventArgs e)
{
ComboBox comboBox = (ComboBox)sender;
if (comboBox.Items != null)
{
List<String> elementname = Elements();
foreach (string s in elementname)
{
if (!comboBox.Items.Contains(s))
{
comboBox.Items.Add(s);
}
}
}
}
我得到了这个例外:
您能否建议如何将值添加到DataGridViewComboBoxColumn
集合中的现有Items
。
答案 0 :(得分:1)
您正在添加Items
编辑控件,但不会添加到Items
的{{1}},最终将用于验证。
为了便于访问托管DGV,我们使用特殊类型ComboBoxColumn
。
现在,我们将在DataGridViewComboBoxEditingControl
事件中为Items
个集合添加新选项::
ComboBox1_DropDown
注意:
除非您为其编码,否则新的DataGridViewComboBoxEditingControl comboBox = (DataGridViewComboBoxEditingControl)sender;
DataGridView dgv = comboBox.EditingControlDataGridView;
if (comboBox.Items != null && dgv != null)
{
DataGridViewComboBoxColumn dcbc =
(DataGridViewComboBoxColumn) dgv.Columns[dgv .CurrentCell.ColumnIndex];
List<String> elementname = Elements.ToList();
foreach (string s in elementname)
{
if (!comboBox.Items.Contains(s))
{
comboBox.Items.Add(s);
dcbc.Items.Add(s);
}
}
}
将不会持久。
因此,如果您已将字段设置为新值并保存它们,则还必须在重新加载DGV之前保存并重新加载这些新值,否则这些值将不在Items
的值列表中并再次抛出Column
!
存储它们的通常位置是DBMS中的DataError
,但任何其他外部存储也可能像DataTable
文件或dynamic resources等一样使用。但是DBMS是最自然的选择。