2010-06-01 43 views
6

Para empezar, lo que tengo es una aplicación Winforms simple, con solo un botón de guardar y cargar, y con un control datagridview para contener datos. Lo que quiero hacer es ingresar algunos datos en el control, presionar el botón Guardar y guardar todos los datos en un archivo localmente en la computadora, y cuando presiono cargar, carga el archivo y rellena el control apropiadamente, manteniendo todas las filas, columnas y datos son los mismos que cuando se guardan.C# - Guardar un DataGridView en un archivo y cargarlo

Aunque suena bastante simple para mí, no puedo encontrar una buena manera de guardar y cargar los datos. ¿Puedo obtener algunos consejos o ejemplos para comenzar?

Gracias.

Respuesta

7

Enlace el DataGridView a un DataTable, y el uso de las DataTable ReadXml() y WriteXml() métodos para leer y escribir los datos en un archivo.

Si alguna vez tiene varias cuadrículas vinculadas a varias tablas relacionadas, puede representar el esquema con un DataSet y utilizar los métodos ReadXml() y WriteXml() de DataSet para leer y escribir todo el esquema.

Hay un ejemplo en la página MSDN para DataTable.WriteXml() que puede ser útil.

3

He probado una manera sencilla de ahorrar DataGridView a un archivo:

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

y para cargar un archivo de este tipo en un 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(); 
      } 
    } 
} 

considero que he asumido que el control DataGridView tiene columnas fijas, en su situación específica, debe agregar algunos códigos para insertar nuevas columnas o crear una nueva vista de cuadrícula.

Cuestiones relacionadas