Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载dataGridView XML会向网格中添加新列_C#_Datagridview - Fatal编程技术网

C# 加载dataGridView 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

我有一个通过VisualStudio创建的dataGridView

然后,我有一个save方法,它将表复制到数据集,然后将其保存到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();
        }

我的问题是,当重新加载此数据时,它会在表的一侧创建新列,而不会将数据加载到现有的表结构中。我查看了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();