Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#Winforms:DataGridView离开事件未获取上次更新单元格的值_C#_Xml_Winforms_Datagridview_Xmldataset - Fatal编程技术网

c#Winforms:DataGridView离开事件未获取上次更新单元格的值

c#Winforms:DataGridView离开事件未获取上次更新单元格的值,c#,xml,winforms,datagridview,xmldataset,C#,Xml,Winforms,Datagridview,Xmldataset,我有一个WinForms屏幕,上面有一个DataGridView,还有后退/下一步按钮。在FormLoad上,用XML文档中的值填充网格。然后,用户可以更改网格中任何单元格的值。我创建了一个SaveGridValuesToXml方法,该方法使用网格单元格中的更新值更新XML文件 这基本上可以正常工作,我在网格上的Leave事件中启动了SaveGridValuesToXml方法,因此当用户单击back或next,网格失去焦点时,就会调用save方法 我遇到的问题是,所有单元格值都被更新并正确地反映

我有一个WinForms屏幕,上面有一个
DataGridView
,还有后退/下一步按钮。在
FormLoad
上,用XML文档中的值填充网格。然后,用户可以更改网格中任何单元格的值。我创建了一个
SaveGridValuesToXml
方法,该方法使用网格单元格中的更新值更新XML文件

这基本上可以正常工作,我在网格上的Leave事件中启动了
SaveGridValuesToXml
方法,因此当用户单击back或next,网格失去焦点时,就会调用save方法

我遇到的问题是,所有单元格值都被更新并正确地反映在XML文件中,除了网格失去焦点时具有焦点的单元格。例如,在三列网格中,如果我更新第一行中的第一、第二和第三个单元格,当网格失去焦点时,只有我在第一和第二个单元格中所做的更改会保存到XML文件中

代码示例如下-加载父窗体时调用loadXMLDataInToGridView()方法

XmlDataDocument xmlData = new XmlDataDocument();

private void LoadXmlDataIntoGridGridView()
{        
    xmlData.DataSet.ReadXml(@"C:\testFile.xml");
    uxMappingDataGridView.DataSource = xmlData.DataSet;
    uxMappingDataGridView.DataMember = "Item";
}

private void uxBackButton_Click(object sender, EventArgs e)
{
    this.Hide();
    uxSettingsUserControl settingsScreen 
       = ParentForm.Controls["uxSettingsUserControl"] as uxSettingsUserControl;
    settingsScreen.Show();
}

private void uxNextButton_Click(object sender, EventArgs e)
{
    this.Hide();
    uxLoadScriptUserControl loadScriptScreen 
       = ParentForm.Controls["uxLoadScriptUserControl"] as uxLoadScriptUserControl;
    loadScriptScreen.Show();
}

private void uxMappingDataGridView_Leave(object sender, EventArgs e)
{
    SaveGridValuesToXml();
}

private void SaveGridValuesToXml()
{   
    xmlData.DataSet.WriteXml(@"C:\testFile.xml");
}

有什么建议吗?

这是因为当前编辑的单元格在您单击按钮离开网格时未提交。一,

要获取最后一个值,需要通过在网格上调用
EndEdit()
强制提交更改

在下面的代码中,我从SaveGridValuesToXml()调用它-在您的示例中,休假处理程序也可以工作,两者之间没有显著差异

private void uxMappingDataGridView_Leave(object sender, EventArgs e)
{
    SaveGridValuesToXml();
}

private void SaveGridValuesToXml()
{   
    uxMappingDataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);
    xmlData.DataSet.WriteXml(@"C:\testFile.xml");
}


我不完全清楚它为什么会这样工作-个人感觉像是一个bug,但DataGridView产品团队中可能有人会说这是一个功能。

请提供一些代码-特别是从leave处理程序、savegridvaluestoxml和Back/Next按钮。谢谢David,我用代码片段更新了问题。是的,就是这样。非常感谢大卫!