私はWinForms画面DataGridView
とBack/Nextボタンを持っています。FormLoad
では、グリッドに XML ドキュメントの値が取り込まれます。その後、ユーザーはグリッド内の任意のセルの値を変更できます。SaveGridValuesToXml
グリッド セルから更新された値で XML ファイルを更新するメソッドを作成しました。
これはほとんど問題なく動作SaveGridValuesToXml
し、グリッドの Leave イベントからメソッドを起動したので、ユーザーが [戻る] または [次へ] をクリックしてグリッドがフォーカスを失うと、save メソッドが呼び出されます。
私が抱えている問題は、グリッドがフォーカスを失ったときにフォーカスがあったセルを除いて、すべてのセル値が更新され、XML ファイルに正しく反映されることです。たとえば、3 列のグリッドで、最初の行の 1 番目、2 番目、3 番目のセルを更新すると、グリッドがフォーカスを失うと、1 番目と 2 番目のセルで行った変更のみが 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");
}
助言がありますか?