1

我的 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);
4

2 回答 2

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;
            }
        }
    }
于 2013-04-30T10:27:20.263 回答
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;
            }               
        }
    }
于 2016-04-12T17:31:26.113 回答