DataGridViewComboBox的值在聚焦时清除

时间:2015-04-07 13:43:20

标签: c# datagridview

我已经实施了DataGridViewComboBox,允许使用此thread中的代码进行修改。

我现在的问题是当我对单元格进行聚焦时,该值将被清除。根据我读过的帖子,必须先将项目添加到组合框中。所以这就是我尝试过的。你能否告诉我出了什么问题?

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
        {
            DataGridViewRow row = dataGridView1.CurrentRow;
            DataGridViewCell cell = dataGridView1.CurrentCell;

            if (cell == row.Cells[colComboBox.Name])
            {
                DataGridViewComboBoxEditingControl control = e.Control as DataGridViewComboBoxEditingControl;
                control.DropDownStyle = ComboBoxStyle.DropDown;

                //For testing purposes
                colComboBox.Items.Add("Test");//I'm adding the item to the combobox control
                row.Cells[colComboBox.Name].Value = "Test";//Then set the value of the cell based on the item I added
            }
        }
    }

    private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        if (e.ColumnIndex == colComboBox.Index)
        {
            colComboBox.Items.Clear();
            object eFV = e.FormattedValue;
            if (!colComboBox.Items.Contains(eFV))
            {
                colComboBox.Items.Add(eFV);
                dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = eFV;
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

在您关联的示例中,使用的Validating事件是编辑组合框,而不是DataGridView的{​​{1}}。

顺便说一下,使用CellValidating事件来访问编辑控件通常是一个坏主意。我建议您在填充datagridview之前添加此代码来使用单元格模板:

EditingControlShowing

答案 1 :(得分:0)

我不完全确定DataGridViewComboBox为什么会这样做。但是使用默认属性试验ComboBox控件时,它不会在聚焦时清除值,并且行为就像TextBox控件一样。解决方案只是将控件的Text属性实际设置为例如某种全局变量,可以被绑定到控件的其他事件访问。至于现在,这是我正在努力实现的行为。

DataGridViewComboBoxEditingControl control = e.Control as DataGridViewComboBoxEditingControl;
        control.DropDownStyle = ComboBoxStyle.DropDown;
        control.Text = SomeGlobalVariable;