动态修改时,Datagridview单元格值未更新

Thr*_*ian 5 .net c# datagridview winforms

根据设计要求,用户无法直接编辑datagridview.它处于只读模式.当用户双击单元格时,datagridview的只读属性变为false,单元格接受键盘输入.但是,原始键盘输入需要在进入单元格之前进行格式化.所以,我拦截KeyPress事件如下:

private void dgw_keyPress(object sender, KeyPressEventArgs e)
 {
     e.Handled = true;
 }
Run Code Online (Sandbox Code Playgroud)

此时,单元格处于编辑模式和脏模式.然后我用不同的方法更新Value属性并调用dgw.Refresh()哪个应该在单元格上显示更新的值.但事实并非如此.它只会在当前单元格不脏并且不处于编辑模式时更新.如何在单元格仍处于编辑模式时强制显示更新后的值?

有任何想法吗?

小智 11

使用下面的内容刷新当前单元格的值,更改为适合您的EditingControl类型

if (dgvMain.EditingControl is TextBox)
{
    dgvMain.EditingControl.Text = dgvMain.CurrentCell.Value.ToString();
}
Run Code Online (Sandbox Code Playgroud)

另一种方法:

调用此方法可强制单元格在编辑模式下更新其显示值.当外部进程修改单元格值并且您希望通知用户更改时,这非常有用,即使用户指定的更改因此而丢失也是如此.细节

dgvMain.RefreshEdit();
Run Code Online (Sandbox Code Playgroud)


Don*_*kby 0

您可以通过实现IDataGridViewEditingControl接口来做到这一点。我认为这是最大程度地控制单元格如何进入和离开编辑模式的方法。您可以在 Mark Rideout 的DataGridView 常见问题解答 (DOC)的第 5.11 节中找到更多详细信息