我有一个带有可编辑组合框列的datagridview,但是每次在当前组合框上按“ Enter”时,我正在编写的文本都会消失。
private void dgView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (dgView1.CurrentCell.IsInEditMode)
{
if (dgView1.CurrentCell.GetType() == typeof(DataGridViewComboBoxCell))
{
if (!((DataGridViewComboBoxColumn)dgView1.Columns[e.ColumnIndex]).Items.Contains(e.FormattedValue))
{
((DataGridViewComboBoxColumn)dgView1.Columns[e.ColumnIndex]).Items.Add(e.FormattedValue);
}
}
}
}
private void dgView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
{
ComboBox cbo = (ComboBox)e.Control;
cbo.DropDownStyle = ComboBoxStyle.DropDown;
}
}
我还尝试添加事件处理程序:“按按键”,“按按键”和“按按键”,但是发生相同的问题。
当我按下“ Enter”键时,如何保留当前文本?
在DataGridViewComboBoxColumn
不接受未包含任何值Items
集合。因此,当用户键入新值时,当前单元格在编辑后根本不会存储该值。您必须找到另一种在单元格编辑后立即获取最后一个值的方法。我们可以DataGridViewComboBoxEditingControl
在EditingControlShowing
事件处理程序中获得实际值,该控件实际上是一个ComboBox
,我们可以处理TextChanged
事件。最好的DataGridView
处理事件提交新值(加入Items
并显示在当前小区)的CellEndEdit
事件。所以这是您应该执行的代码,我已经对其进行了测试,并且看起来像您期望的那样工作:
//use some variable to store the last edited value
string editingValue;
//EditingControlShowing event handler
private void dataGridView1_EidtingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e) {
var combo = e.Control as ComboBox;
if(combo != null){
combo.DropDownStyle = ComboBoxStyle.DropDown;
combo.TextChanged += (s,ev) => {
editingValue = combo.Text;
};
}
}
//CellEndEdit event handler for your dataGridView1
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e){
var comboColumn = dataGridView1.Columns[e.ColumnIndex] as DataGridViewComboBoxColumn;
if(comboColumn != null && editingValue != "" &&
!comboColumn.Items.Contains(editingValue)){
comboColumn.Items.Add(editingValue);
dataGridView1[e.ColumnIndex, e.RowIndex].Value = editingValue;
}
}
请注意,单元格值应为string
,这就是为什么将editingValue
声明为的原因string
,否则,可能必须将Text
编辑comboBox的转换为的正确类型editingValue
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句