2010-06-01 73 views
6

首先,我有一個簡單的Winforms應用程序,只有一個保存和加載按鈕,以及一個datagridview控件來保存數據。我想要做的是向控制中輸入一些數據,點擊保存按鈕,並將所有數據保存到本地計算機上的文件中,當我點擊加載時,它會加載文件並適當地填充控件,保留所有行,列和數據與保存時相同。C# - 保存DataGridView文件並加載

儘管對我來說聽起來相當簡單,但我似乎找不到一種保存和加載數據的好方法。我能得到一些指針或示例來啓動自己嗎?

謝謝。

回答

7

將DataGridView綁定到DataTable,並使用DataTable ReadXml()WriteXml()方法讀取和寫入數據到文件。

如果您有多個網格綁定到多個相關的表,您可以使用DataSet來表示模式,並使用DataSet的ReadXml()WriteXml()方法來讀取和寫入整個模式。

DataTable.WriteXml()的MSDN頁面上有一個示例,您可能會發現它有幫助。

3

我已經測試了一個簡單的方法來datagridview的保存到一個文件:

//DataGridView dgv=... 
string file= "c:\\mygrid.bin"; 
using (BinaryWriter bw = new BinaryWriter(File.Open(file, FileMode.Create))) 
{ 
    bw.Write(dgv.Columns.Count); 
    bw.Write(dgv.Rows.Count); 
    foreach (DataGridViewRow dgvR in dgv.Rows) 
    { 
     for (int j = 0; j < dgv.Columns.Count; ++j) 
     { 
      object val=dgvR.Cells[j].Value; 
      if (val == null) 
      { 
       bw.Write(false); 
       bw.Write(false); 
      } 
      else 
      { 
       bw.Write(true); 
       bw.Write(val.ToString()); 
      } 
     } 
    } 

以及加載這樣的文件到一個DataGridView:

//DataGridView dgv = ... 
dgv.Rows.Clear(); 
string file="c:\\mygrid.bin"; 
using (BinaryReader bw = new BinaryReader(File.Open(file, FileMode.Open))) 
{ 
    int n=bw.ReadInt32(); 
    int m=bw.ReadInt32(); 
    for(int i=0;i<m;++i) 
    { 
     dgv.Rows.Add(); 
     for (int j = 0; j < n; ++j) 
     { 
       if (bw.ReadBoolean()) 
       {           
        dgv.Rows[i].Cells[j].Value = bw.ReadString();           
       } 
       else bw.ReadBoolean(); 
      } 
    } 
} 

考慮,我認爲在DataGridView控制有固定的列,在你的具體情況下,你應該添加一些代碼來插入新的列或創建一個新的gridview。