我已经实施了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;
}
}
}
答案 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;