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