如果从单元格中没有丢失选择,则不会保存DataGridView -Value

8 .net datagridview

我使用DataGridView控件通过XML序列化读取和写入XML文件.

我有一个问题,如下所述:

  1. 我读取了一个XML文件,并使用反序列化对象填充DataGridView控件.
  2. 我更新了单元格上DataGridView的所有值.
  3. 我选择文件另存为选项而不会失去对最后一个单元格的关注.

此后,不更新特定单元格的值.如果我故意将焦点移开(比如我点击同一网格上的另一个单元格),则更新该值.

任何人都可以建议任何解决方案吗?

Tho*_*que 16

这是因为编辑的单元格值在被验证之前没有提交给DataSource,这在单元格失去焦点时发生.如果要立即提交修改,可以处理CurrentCellDirtyStateChanged事件,并在处理程序中调用CommitEdit方法:

void dataGridView1_CurrentCellDirtyStateChanged(object sender,
    EventArgs e)
{
    if (dataGridView1.IsCurrentCellDirty)
    {
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这在我的保存方法中完美运行.谢谢!! (2认同)

小智 16

最好的方法(虽然快速和脏)是分配currentCell值Nothing.

例如,在save方法中,执行以下操作:

dgvMyGrid.CurrentCell = Nothing
Run Code Online (Sandbox Code Playgroud)

然后继续前进.


Tho*_*mar 4

如果我理解正确,单元格处于编辑模式,并且您试图以编程方式停止编辑并将值传递到底层数据源?

我在我的一个应用程序中使用了一种有点“肮脏”的方法来做到这一点:

if (dataGridView1.CurrentCell.IsInEditMode)    
{    
    int y = dataGridView1.CurrentCellAddress.Y;    
    int x = dataGridView1.CurrentCellAddress.X;    
    if (y > 0)      
        dataGridView1.CurrentCell = dataGridView1.Rows[y - 1].Cells[x];    
    else    
        dataGridView1.CurrentCell = dataGridView1.Rows[y + 1].Cells[x];    
    dataGridView1.CurrentCell = dataGridView1.Rows[y].Cells[x];    
}
Run Code Online (Sandbox Code Playgroud)

该代码首先检查当前单元格是否处于编辑模式。然后它以编程方式更改当前单元格(如果我们位于第一行,则更改为上一行或下一行)。之后,它恢复当前的单元格选择。

您可以在“文件另存为”处理程序中调用此代码。