在一个DataGridview中的某一个单元格输入了内容,点击窗体上的Button按钮(输入的光标还在那个输入的单元格中,没有失去焦点),获取到的那个单元格的值不是刚才输入的值,还是输入前的值,现将解决方法整理如下:
在DataGridView的EditingControlShowing事件中:
private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { TextBox EditingTB = e.Control as TextBox; // 获取编辑用的文本框的引用 EditingTB.TextChanged += EditingTB_TextChanged; // 动态注册事件 }
// 当子控件的内容更改时发生 private void EditingTB_TextChanged(object sender, EventArgs e) { if (this.dataGridView.CurrentCell.ColumnIndex == 9) { this.dataGridView.CurrentCell.Value = (sender as TextBox).Text; } }
这样就解决了上述问题
--------------------------------------
还有一个问题,就是如果在编辑单元格时,如果单元格内容没有变化,就不进行提交保存,(怎么知道单元格的内容是否有变化)
那只有在入焦点的时候记录一下单元格之前的值,然后在马上提交保存的函数中获取值再做一个对比。
如:
第一步:在DataGridView控件的majorDataGrid_EditingControlShowing事件中给单元格绑定Enter和Leave 事件
private void majorDataGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (e.Control.GetType().Equals(typeof(DataGridViewTextBoxEditingControl)))//cell为类TextBox时 { e.CellStyle.BackColor = Color.FromName("window"); DataGridViewTextBoxEditingControl editingControl = e.Control as DataGridViewTextBoxEditingControl; editingControl.Leave += new EventHandler(editingControl_TextChanged); editingControl.Enter += new EventHandler(editingControl_Enter); } }
第二步:当textConrol获取焦点的时候记录单元格的值
private void editingControl_Enter(object sender, EventArgs e) { TextBox t = (TextBox)sender; preTextContent = t.Text; }
第三步:当光标离开单元格的时候比较进入和离开时单元格的值有没有发生变化,如果值发生变化说明发生了修改,此时利用该行的Tag属性来标注单元格已被修改
private void editingControl_TextChanged(object sender, EventArgs e) { TextBox t = (TextBox)sender; editTextContent = t.Text; if (editTextContent != preTextContent) { majorDataGrid.Rows[majorDataGrid.CurrentCell.RowIndex].Tag = Constant.UPDATED; } }
转 : https://blog.csdn.net/esunshine1985/article/details/53938991
https://blog.csdn.net/guoguo19811025/article/details/40896727