DataGridView中EnditCommit()调用之后,单元格的内容被全选了,每次输入都要鼠标点击定位到最后才能继续输入

Posted cellphoneyeah

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DataGridView中EnditCommit()调用之后,单元格的内容被全选了,每次输入都要鼠标点击定位到最后才能继续输入相关的知识,希望对你有一定的参考价值。

因为某些需求,DataGridView在输入一次内容,就要调用ECommitEdit(DataGridViewDataErrorContexts.Commit)来将内容提交,但是这样做之后,控件就会当你输入的内容都完成了,所以将内容全选(内部的原理我还没时间去了解,所以不太清楚,希望知道的人可以告诉我)

解决方案:

为了让用户可以正常输入一串字符,在每次调用CommitEdit()方法之后,都获取控件当前单元格对应控件类型TextBox currentTextBox,调用currentTextBox的select()方法将光标定位到文本最后一个字符处,代码如下

base.dgvDetail.CommitEdit(DataGridViewDataErrorContexts.Commit);
                TextBox currentTextBox = base.dgvDetail.EditingControl as TextBox;
                if (currentTextBox!=null&&currentTextBox.Text != null)
                    currentTextBox.Select(currentTextBox.Text.Length, 0);//防止CommitEidt后文本被全选

注意还要考虑调用CommitEdit()方法时,绑定的控件不是TextBox的情况

以上是关于DataGridView中EnditCommit()调用之后,单元格的内容被全选了,每次输入都要鼠标点击定位到最后才能继续输入的主要内容,如果未能解决你的问题,请参考以下文章

winform中获取datagridview如何获取选中的行,返回值object

关于VB.NET中 datagridview 刷新问题

如何把datagridview控件中一行数据导入SQLSERVER数据库中

如何在C#中 双击datagridview1中的一行数据,添加到新的datagridview2中。 B/C VS2010

如何在datagridview中添加行,删除行,插入行???

c# winform A 窗体 datagridview1,B窗体datagridview2,如何把datagridview1中显示的数据全部复制到B中