Visual Studio で作成した dataGridView があります。
次に、テーブルを DataSet にコピーしてから XML に保存する save メソッドがあります。
if (savefile.ShowDialog() == DialogResult.OK)
{
DataSet ds = new DataSet();
DataTable dt = new DataTable("whereClause");
ds.Tables.Add(dt);
for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
{
DataColumn column = new DataColumn(dataGridView1.Columns[i - 1].Name);
dt.Columns.Add(column);
}
int ColumnCount = dataGridView1.Columns.Count;
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
DataRow dataRow = dt.NewRow();
for (int i = 0; i < ColumnCount; i++)
{
dataRow[i] = dr.Cells[i].Value;
}
dt.Rows.Add(dataRow);
}
XmlTextWriter newXml = new XmlTextWriter(savefile.FileName, Encoding.UTF8);
ds.WriteXml(newXml);
newXml.Close();
}
次に、一致するロード メソッドがあります。
if (openfile.ShowDialog() == DialogResult.OK)
{
//Create xml reader
XmlReader xmlFile = XmlReader.Create(openfile.FileName, new XmlReaderSettings());
DataSet dataSet = new DataSet();
//Read xml to dataset
dataSet.ReadXml(xmlFile);
dataGridView1.DataSource = dataSet.Tables["whereClause"];
//Close xml reader
xmlFile.Close();
}
私の問題は、このデータが再度読み込まれると、テーブルの横に新しい列が作成され、既存のテーブル構造にデータが読み込まれないことです。DataSet.Merge を調べましたが、これを必要に応じて機能させるのに苦労しました。XML を読み込んで、テーブル構造の既存の列にマップするにはどうすればよいですか? 必要に応じて、ロード時にテーブル全体をクリアできます。