首页 新闻 搜索 专区 学院

net中DataGridView控件中,某个列的单元格输入值改变时触发命令的方法。

0
悬赏园豆:200 [已解决问题] 解决于 2012-09-20 11:31

.net中DataGridView控件中,想实现与textchanged一样 的功能。DataGridView控件某列的单元格内 每输入一个字就自动触发一次事件。本来用CellValueChanged方法试过,但这方法必修要焦点离开单元格后才能触发事件。我的目的是,在键盘输入字符的过程中触发事件,可是试过很多方法都无法实现目的。。希望有经验的高手能提点一下。。哪怕能实现在输入字符后再按某个键进行触发事件也可以,只要焦点不离开正在编辑的单元格就行。。例如:我要在某列某单元格输入字符串“ABCD”,当输入A时触发一次事件,输入B时也触发一次事件,如此类推

conan_lin的主页 conan_lin | 初学一级 | 园豆:3
提问于:2012-07-04 17:30
< >
分享
最佳答案
0
改一下:
  public frmDepositEdit()
        {
            InitializeComponent();
            dgvCardType.AutoGenerateColumns = false;
            dgvCardType.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgvCardType_EditingControlShowing);
        }

        void dgvCardType_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            e.Control.KeyPress += new KeyPressEventHandler(Control_KeyPress);
        }

        //求实收金额。
        decimal addMoney = 0;
        void Control_KeyPress(object sender, KeyPressEventArgs e)
        {
      //要处理的事件信息。

decimal intNumberBoxes = 0; decimal someAmount = 0; if (char.IsNumber(e.KeyChar)) { int column = dgvCardType.CurrentCellAddress.X; int row = dgvCardType.CurrentCellAddress.Y; if (column == 2) { string cellValue = Char.ToString(e.KeyChar); string test = dgvCardType[column, row].EditedFormattedValue.ToString(); test = test + cellValue; intNumberBoxes = Convert.ToDecimal(test); if (intNumberBoxes > 999) { e.Handled = true; } someAmount = decimal.Parse(dgvCardType.Rows[dgvCardType.CurrentCellAddress.Y].Cells[1].Value.ToString()); txt_现金金额.Text = (addMoney + intNumberBoxes * someAmount).ToString(); } } }
收获园豆:200
悟行 | 专家六级 |园豆:12240 | 2012-07-04 17:54
其他回答(2)
0

改成CellValueChanging()不行?

kuangkro | 园豆:241 (菜鸟二级) | 2012-07-06 09:46
0

这种需求建议最好采用ajax实现,没有一个用户愿意输入一个字符页面就要刷新一下,每输入一个字就必须等一下,用户体验很不好,即使是使用ajax实现也不建议每次输入都触发一次,输入得快就会感觉你的程序卡卡的等问题...

安卓粉丝 | 园豆:99 (初学一级) | 2012-07-12 23:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册