0

我在我的DataGridViewComboBoxColumn中有奇怪的结果。DataGridComboBoxColumn在CellEnter上显示第一个值

1)当没有设置值时,我单击单元格(而不是下拉箭头)时,选项中的第一个值显示为值,当单击单元格时,它将返回空白值。这是误导,因为没有选择任何值,但它显示的第一个值,直到你点击单元格。

一种解决方案是使第一个选项空白,但此后我仍然在下一期的折磨......

2)如果我选择一个已经有值的单元格,然后选择做一个细胞不是,最初选定的值将显示在没有选定值的单元格中。再次,单击单元格将清除它,但是,它又是误导。

我想使这不会误导...任何人都知道的解决方案?

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); 

DataTable dt = new DataTable(); 
dt.Columns.Add("f_Id"); 
dt.Columns[0].DataType = typeof(string); 
dt.Columns.Add("f_Desc"); 
dt.Columns[1].DataType = typeof(string); 

for (int i = 0; i < values.Count(); i++) 
{ 
    dt.Rows.Add(values[i], values[i]); 
} 

col.DataSource = dt; 
col.DisplayMember = dt.Columns[1].ColumnName; 
col.ValueMember = dt.Columns[0].ColumnName; 
col.HeaderText = header; 
col.Name = header; 

DataGridView1.Columns.Add(col); 
+0

没有人知道这一切吗?这是微软的默认设置,非常烦人。 – Tizz 2013-04-25 15:56:55

回答

1

这一直困扰我一段时间,以及Zeeshanef的代码帮助,但仍然不能完全解决它对我来说。经过进一步调查,我发现如果使用DefaultValuesNeeded方法设置某些默认值,可能会设置单元格值,但在EditingControlShowing方法中显示的组合框控件具有空值/文本。我通过调整代码来解决它:

private void datagridview1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     if (e.Control is ComboBox)     
     { 
      ComboBox comboBox = (ComboBox)e.Control; 
      if (datagridview1.CurrentCell.Value == null 
       || string.IsNullOrEmpty(datagridview1.CurrentCell.Value.ToString()) 
       || string.IsNullOrEmpty(comboBox.SelectedText) 
       ) 
      { 
       comboBox.SelectedIndex = -1; 
      }    
     } 
    } 
1

我也在寻找这个,并最终解决了这个问题。 创建DatagridView的以下事件并将[comboboxcolumnNo]设置为您的datagridcombobox列号。

现在每当combobox列将焦点进行编辑时,它将检查当前单元格值是否为null,如果它为null,那么它将显示-1指数的combobox,它什么都不显示。

private void datagridview1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     if (datagridview1.CurrentCell.ColumnIndex == comboboxcolumnNo && e.Control is ComboBox) 
     { 
      ComboBox comboBox = (ComboBox)e.Control; 
      if (datagridview1.CurrentCell.Value == null) 
      { 
       comboBox.SelectedIndex = -1; 
      } 
     } 
    } 
相关问题