更新现有的DataGridViewComboBoxColumn Items集合

时间:2016-10-14 08:49:46

标签: c# datagridview datagridviewcolumn

我们有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);
         }
      }
   }
}

我得到了这个例外:

enter image description here

您能否建议如何将值添加到DataGridViewComboBoxColumn集合中的现有Items

1 个答案:

答案 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是最自然的选择。