C#save / load表单数据(datagridview,textbox ...)

时间:2017-02-01 12:45:44

标签: c# winforms datagridview

我有一个包含4个文本框的表单+带有11个列的datagridview。

从这里有一个方法来保存datagridview这个工作正常,但是有可能改进它所以我不仅可以保存datagridview值,还可以保存文本框吗?(然后加载。)

谢谢

或者还有其他可用于此的东西吗?

private DataTable GetDataTableFromDGV(DataGridView dataGridView1)
    {
        var dt = new DataTable();

         foreach (DataGridViewColumn column in dataGridView1.Columns)
         {
             if (column.Visible)
             {
                dt.Columns.Add();
             }
         }

        object[] cellValues = new object[dataGridView1.Columns.Count];
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            for (int i = 0; i < row.Cells.Count; i++)
            {
                cellValues[i] = row.Cells[i].Value;
            }
            dt.Rows.Add(cellValues);
        }

        return dt;


    }

    private void SaveXML(object sender, EventArgs e)
    {
        //Savefile dialog for save CSV file
        SaveFileDialog savefile = new SaveFileDialog();
        savefile.FileName = tbOrderNr.Text + " - " + tbCustommer.Text + ".xml";
        savefile.Filter = "xml files (*.xml)|*.xml";

        if (savefile.ShowDialog() == DialogResult.OK)
        {
            DataTable dT = GetDataTableFromDGV(dataGridView1);
            DataSet dS = new DataSet();
            dS.Tables.Add(dT);
            dS.WriteXml(File.OpenWrite(savefile.FileName));

        }
    }

}

1 个答案:

答案 0 :(得分:0)

最后我通过dataset.WriteXml

使用保存文本框和datagridview
//XML save throught dataset
    private void XMLsave(object sender, EventArgs e)
    {
        dataGridView1.AllowUserToAddRows = false;
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        dt.TableName = "OrderData";
        dt.Columns.Add("OrderNr");
        dt.Columns.Add("Custommer");
        dt.Columns.Add("Material");
        dt.Columns.Add("MaterialCode");
        ds.Tables.Add(dt);

        DataTable dt1 = new DataTable();
        dt1.TableName = "Data";
        dt1.Columns.Add("Lenght");
        dt1.Columns.Add("Width");
        dt1.Columns.Add("Qty");
        ds.Tables.Add(dt1);

        DataRow row = ds.Tables["OrderData"].NewRow();
        row["OrderNr"] = tbOrderNr.Text;
        row["Custommer"] = tbCustommer.Text;
        row["Material"] = tbMaterial.Text;
        row["MaterialCode"] = tbForm2MatCode.Text;
        ds.Tables["Data"].Rows.Add(row);

        foreach (DataGridViewRow r in dataGridView1.Rows)
        {
            DataRow row1 = ds.Tables["Data"].NewRow();
            row1["Lenght"] = r.Cells[0].Value;
            row1["Width"] = r.Cells[1].Value;
            row1["Qty"] = r.Cells[2].Value;
            ds.Tables["Data"].Rows.Add(row1);
        }
        ds.WriteXml("test.xml");
        dataGridView1.AllowUserToAddRows = true;

    }

然后加载:

private void XmlLoad(object sender, EventArgs e)
    {
        DataSet ds = new DataSet();
        ds.ReadXml("test.xml");
        tbOrderNr.Text = ds.Tables["OrderData"].Rows[0][0].ToString();
        tbCustommer.Text = ds.Tables["OrderData"].Rows[0][1].ToString();
        tbMaterial.Text = ds.Tables["OrderData"].Rows[0][2].ToString();
        tbForm2MatCode.Text = ds.Tables["OrderData"].Rows[0][3].ToString();

        foreach (DataRow item in ds.Tables["Data"].Rows)
        {
            dataGridView1.AllowUserToAddRows = false;
            int n = dataGridView1.Rows.Add();
            dataGridView1.Rows[n].Cells[0].Value = tem["Lenght"].ToString();
            dataGridView1.Rows[n].Cells[1].Value = item["Width"].ToString();
            dataGridView1.Rows[n].Cells[2].Value = item["Qty"].ToString();
            dataGridView1.AllowUserToAddRows = true;
        }