我在DataGridViewComboBoxColumn中遇到了奇怪的结果。
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 :(得分:1)
我也在寻找这个,最后解决了这个问题。 创建DatagridView的以下事件,并将[comboboxcolumnNo]设置为datagridcomboboxcolumn编号。
现在每当组合框列聚焦进行编辑时,它将检查当前单元格值是否为空,如果为空,则显示组合框的-1索引,但不显示任何内容。
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;
}
}
}
答案 1 :(得分: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;
}
}
}