更新现有的 DataGridViewComboBoxColumn Items 集合
Updating the existing DataGridViewComboBoxColumn Items collection
我们有 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);
}
}
}
}
我遇到了这个异常:
能否建议如何将值添加到 Items
集合中的现有 DataGridViewComboBoxColumn
。
您正在添加到 Items
编辑控件中,而不是添加到 ComboBoxColumn
的 Items
中,最终将用于验证。
为了轻松访问托管 DGV,我们使用特殊类型 DataGridViewComboBoxEditingControl
。
现在我们将在 ComboBox1_DropDown
事件中将新选择添加到两个 Items
集合中::
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);
}
}
}
注意:
新的 Items
将不会 persistet 除非您为它编写代码。
因此,如果您已将字段设置为新值并保存它们,您还必须在重新加载 DGV 之前保存并重新加载这些新值,否则这些值将不在 Column
的列表中值并再次抛出 DataError
!
通常存储它们的地方是您的 DBMS 中的 DataTable
,但也可以使用任何其他外部存储,例如 XML
文件或 dynamic resources 等。但 DBMS 是 imo 最自然的选择。
我们有 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);
}
}
}
}
我遇到了这个异常:
能否建议如何将值添加到 Items
集合中的现有 DataGridViewComboBoxColumn
。
您正在添加到 Items
编辑控件中,而不是添加到 ComboBoxColumn
的 Items
中,最终将用于验证。
为了轻松访问托管 DGV,我们使用特殊类型 DataGridViewComboBoxEditingControl
。
现在我们将在 ComboBox1_DropDown
事件中将新选择添加到两个 Items
集合中::
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);
}
}
}
注意:
新的 Items
将不会 persistet 除非您为它编写代码。
因此,如果您已将字段设置为新值并保存它们,您还必须在重新加载 DGV 之前保存并重新加载这些新值,否则这些值将不在 Column
的列表中值并再次抛出 DataError
!
通常存储它们的地方是您的 DBMS 中的 DataTable
,但也可以使用任何其他外部存储,例如 XML
文件或 dynamic resources 等。但 DBMS 是 imo 最自然的选择。