1

我有一个通过 Visual Studio 创建的 dataGridView。

在此处输入图像描述

然后我有一个保存方法,它将表复制到数据集,然后将其保存到 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 并将其映射到表结构中的现有列?如有必要,可以在加载时清除整个表。

4

1 回答 1

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();
于 2013-07-16T13:39:34.953 回答