C# 加载dataGridView XML会向网格中添加新列
我有一个通过VisualStudio创建的dataGridView 然后,我有一个save方法,它将表复制到数据集,然后将其保存到XML:C# 加载dataGridView XML会向网格中添加新列,c#,datagridview,C#,Datagridview,我有一个通过VisualStudio创建的dataGridView 然后,我有一个save方法,它将表复制到数据集,然后将其保存到XML: if (savefile.ShowDialog() == DialogResult.OK) { DataSet ds = new DataSet(); DataTable dt = new DataTable("whereClause"); ds.Tables.Add
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();
}
我的问题是,当重新加载此数据时,它会在表的一侧创建新列,而不会将数据加载到现有的表结构中。我查看了DataSet.Merge,但很难让它按要求运行。如何重新加载XML并将其映射到表结构中的现有列?如有必要,可在加载时清除整个表格 将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>
将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>
DataGrid中的每一列都将其映射到XML中的一个字段。我已经编辑了上面的示例:)DataGrid中的每一列都将其映射到XML中的一个字段。我已经编辑了上面的示例:)在重新绑定dataGridView1时,请稍等,将其数据源设置为null,然后调用DataBind(),将数据源设置为dataSet。Tables[“whereClause”]?在重新绑定dataGridView1时,请稍等,将其数据源设置为null,然后调用DataBind(),将数据源设置为dataSet。Tables[“whereClause”]?
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; }
}
gridView1.DataSource = null;
gridView1.DataBind();
gridView1.Columns.Clear();
gridView1.DataSource = dataSet.Tables["whereClause"];
gridView1.DataBind();