我有一个通过Visual Studio创建的dataGridView。
然后我有一个save方法,它将表复制到DataSet,然后将其保存到XML:
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加载回来并将其映射到表结构中的现有列?如果需要,可以在加载整个表时将其清除。
答案 0 :(得分:1)
将DataGridView AutoGenerateColumns上的属性设置为false。
但是,您需要手动设置每列绑定到的字段。例如:
<asp:GridView ID="gridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Forename" HeaderText="Column 1" /> <!-- state each column -->
</Columns>
</asp:GridView>
示例背后的代码:
List<Customer> cu = new List<Customer>();
cu.Add(new Customer() { Forename = "Onam" });
gridView1.DataSource = cu;
gridView1.DataBind();
public class Customer
{
public string Forename { get; set; }
}
或者您只需执行以下操作(设置AutoGenerateColumns = true):
gridView1.DataSource = null;
gridView1.DataBind();
gridView1.Columns.Clear();
gridView1.DataSource = dataSet.Tables["whereClause"];
gridView1.DataBind();