2010-06-01 16 views
6

Na początek mam prostą aplikację WinForm, z przyciskiem zapisywania i ładowania i kontrolą danych do przechowywania danych. To, co chcę zrobić, to wprowadzić niektóre dane do kontrolki, nacisnąć przycisk zapisu i zapisać wszystkie dane do pliku lokalnie na komputerze, a kiedy uderzę, ładuje plik i zapełnia kontrolkę odpowiednio, zachowując wszystkie wiersze, kolumny i dane są takie same, jak zapisane.C# - Zapisywanie DataGridView do pliku i ładowanie

Chociaż wydaje mi się to dość proste, wydaje mi się, że nie jest to dobry sposób na zapisanie i załadowanie danych. Czy mogę uzyskać kilka wskazówek lub przykładów, aby zacząć?

Dziękuję.

Odpowiedz

7

Powiąż DataGridView z DataTable i użyj metod DataTable ReadXml() i WriteXml() do odczytywania i zapisywania danych do pliku.

Jeśli kiedykolwiek masz wiele siatek powiązanych z wieloma powiązanymi tabelami, możesz reprezentować schemat za pomocą DataSet i używać metod DataSet do odczytu i zapisu całego schematu.

Istnieje przykład na stronie MSDN dla DataTable.WriteXml(), który może okazać się pomocny.

3

Ja testowałem prosty sposób na zaoszczędzenie DataGridView do pliku:

//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()); 
      } 
     } 
    } 

i ładowania takiego pliku do 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(); 
      } 
    } 
} 

Uważają, że mam przyjąć, że kontrola DataGridView ma ustalone kolumny, w konkretnej sytuacji powinieneś dodać kilka kodów, aby wstawić nowe kolumny lub utworzyć nowy gridview.

Powiązane problemy