根据设计要求,用户无法直接编辑datagridview。它处于只读模式。当用户双击单元格时,datagridview的只读属性变为false,单元格接受键盘输入。但是,原始键盘输入需要在进入单元格之前进行格式化。所以,我按如下方式拦截了KeyPress事件:
private void dgw_keyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
此时,单元格处于编辑模式和脏模式。然后我用另一种方法更新Value属性并调用dgw.Refresh()
,它应该在单元格上显示更新的值。但事实并非如此。它只会在当前单元格不脏并且不处于编辑模式时更新。如何在单元格仍处于编辑模式时强制显示更新后的值?
有什么想法吗?
答案 0 :(得分:11)
使用以下内容刷新当前单元格的值,更改为适合您的EditingControl类型
if (dgvMain.EditingControl is TextBox)
{
dgvMain.EditingControl.Text = dgvMain.CurrentCell.Value.ToString();
}
另一种方法:
调用此方法强制单元格在编辑时更新其显示值 模式。当外部进程修改单元格值时,这很有用 并且您希望通知用户该更改,即使是在 结果,用户指定的更改将丢失。details
dgvMain.RefreshEdit();
答案 1 :(得分:0)
您可以通过实施IDataGridViewEditingControl界面来实现这一目标。我认为这是控制细胞如何进入和离开编辑模式的最佳方式。您可以在Mark Rideout DataGridView FAQ (DOC)
的第5.11节中找到更多详细信息答案 2 :(得分:0)
尝试DataGridView.EndEdit方法。
提交并结束当前单元格的编辑操作。
答案 3 :(得分:0)
我用下面的代码解决了。
GrdBudgetTabOver.EndEdit()
答案 4 :(得分:0)
这将起作用,
dgv.EndEdit()
dgv.InvalidateCell(ColIdx, RowIdx)