.net中DataGridView控件中,想实现与textchanged一样 的功能。DataGridView控件某列的单元格内 每输入一个字就自动触发一次事件。本来用CellValueChanged方法试过,但这方法必修要焦点离开单元格后才能触发事件。我的目的是,在键盘输入字符的过程中触发事件,可是试过很多方法都无法实现目的。。希望有经验的高手能提点一下。。哪怕能实现在输入字符后再按某个键进行触发事件也可以,只要焦点不离开正在编辑的单元格就行。。例如:我要在某列某单元格输入字符串“ABCD”,当输入A时触发一次事件,输入B时也触发一次事件,如此类推
改一下: 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(); } } }
改成CellValueChanging()不行?
这种需求建议最好采用ajax实现,没有一个用户愿意输入一个字符页面就要刷新一下,每输入一个字就必须等一下,用户体验很不好,即使是使用ajax实现也不建议每次输入都触发一次,输入得快就会感觉你的程序卡卡的等问题...