【问题标题】:Updating the existing DataGridViewComboBoxColumn Items collection更新现有的 DataGridViewComboBoxColumn Items 集合
【发布时间】:2016-10-14 08:49:45
【问题描述】:

我们有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

【问题讨论】:

    标签: c# datagridview datagridviewcolumn


    【解决方案1】:

    您正在添加到编辑控件的Items,但没有添加到ComboBoxColumnItems,最终将用于验证。

    为了轻松访问托管 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 是最自然的选择海事组织

    【讨论】:

    • 我已经尝试了您提供的上述解决方案,但仍然遇到同样的错误。 DataGridViewComboBox 单元格值无效
    • 嗯,这一切都不同了。你什么时候得到错误?第一次掉落或后续掉落时?
    • 当我从下拉列表中选择新项目时,我收到了该错误
    • 第一次上面的代码工作正常,但如果我再次打开相同的表单,那么它会抛出相同的错误,因为在 DataGridViewComboBoxColumn 中没有添加项目集合值。
    • 好吧,除非您对其进行编码,否则新项目将不会被持久化。因此,如果您已将字段设置为新值并保存了它们,您还必须保存并重新加载这些新值!存储它们的通常位置是 DataTable,但也可以使用任何其他外部存储,如 XML 文件或 dynamic resources 等。但 DBMS 是自然的选择。
    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2019-06-13
    • 1970-01-01
    • 2013-09-05
    • 2020-04-23
    相关资源
    最近更新 更多