WinForms DatagridViewComboboxColumn“输入密钥”

用户名

我有一个带有可编辑组合框列的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集合。因此,当用户键入新值时,当前单元格在编辑后根本不会存储该值。您必须找到另一种在单元格编辑后立即获取最后一个值的方法。我们可以DataGridViewComboBoxEditingControlEditingControlShowing事件处理程序中获得实际值,该控件实际上是一个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

等待用户输入以继续使用c#winforms中的StreamReader

来自分类Dev

验证按钮单击Winforms C#上的输入

来自分类Dev

WinForms的MVP模式-访问用户输入的正确方法?

来自分类Dev

验证按钮单击Winforms C#上的输入

来自分类Dev

WinForms TabControl

来自分类Dev

动画WinForms

来自分类Dev

在WinForms输入焦点上自动弹出平板电脑触摸键盘

来自分类Dev

在Winforms中,具有“矩阵”(单元行)输入控件的最简单方法是什么?

来自分类Dev

当我单击按钮时刷新整个用户在WinForms应用程序中输入的数据

来自分类Dev

如何在 c# WinForms 中获取用户的字体输入

来自分类Dev

使用WinForms ProgressBar异步/等待-WinForms版本

来自分类Dev

自动将条形码扫描仪的输入发送到文本框VB.Net / Winforms

来自分类Dev

如何基于C#WinForms中的列日期和名称将数据从sql输入到特定的datagridview单元中

来自分类Dev

绑定onclick以输入密钥

来自分类Dev

Django重复输入密钥

来自分类Dev

输入密钥下载产品

来自分类Dev

在WinForms中关闭Windows

来自分类Dev

单元测试WinForms

来自分类Dev

如何调试Winforms Designer

来自分类Dev

在Winforms中绘制CachedBitmap

来自分类Dev

在Winforms中显示PDF

来自分类Dev

WinForms单元测试

来自分类Dev

WinForms中的顶级窗口

来自分类Dev

MDI Winforms的ShowDialog属性

来自分类Dev

WinForms主窗口句柄

来自分类Dev

Winforms实体框架

来自分类Dev

Winforms RadPageView查找控件

来自分类Dev

Winforms PropertyGrid样式

来自分类Dev

Winforms控件定位