Cit*_*rus 2 c# xml datagridview xmldataset winforms
我有一个带有DataGridViewon和Back/Next按钮的WinForms屏幕.在FormLoad,网格上填充了XML文档中的值.然后,用户可以更改网格中任何单元格的值.我已经创建了一个SaveGridValuesToXml方法,它使用网格单元格中的更新值更新XML文件.
这大部分工作正常,我已经SaveGridValuesToXml从网格上的Leave事件中解雇了该方法,因此当用户单击后退或下一步并且网格失去焦点时,将调用save方法.
我遇到的问题是所有单元格值都在XML文件中正确更新和反映,除了网格失去焦点时具有焦点的单元格.例如,在三列网格中,如果我更新第一行中的第一个,第二个和第三个单元格,当网格失去焦点时,我在第一个和第二个单元格中所做的更改将保存到我的XML文件中.
代码示例如下 - 在LoadXmlDataIntoGridGridView()加载父窗体时调用该方法.
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");
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
这是因为当您通过单击按钮离开网格时当前编辑的单元格未提交.1
要获得最后一个值,您需要通过调用EndEdit()网格强制提交更改.
在下面的代码中我从SaveGridValuesToXml()调用它 - 在你的例子中,离开处理程序也可以工作,两者之间没有显着差别.
private void uxMappingDataGridView_Leave(object sender, EventArgs e)
{
SaveGridValuesToXml();
}
private void SaveGridValuesToXml()
{
uxMappingDataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);
xmlData.DataSet.WriteXml(@"C:\testFile.xml");
}
Run Code Online (Sandbox Code Playgroud)
1不完全确定为什么它以这种方式工作 - 个人感觉就像一个bug但是DataGridView产品团队的某个人可能会说这是一个功能.
| 归档时间: |
|
| 查看次数: |
2602 次 |
| 最近记录: |