Solución:
Enlazar DataGridView a DataTable y usar DataTable
ReadXml()
y WriteXml()
métodos para leer y escribir los datos en un archivo.
Si alguna vez tiene varias cuadrículas enlazadas a varias tablas relacionadas, puede representar el esquema con un DataSet y usar el ReadXml()
y WriteXml()
métodos de DataSet para leer y escribir el esquema completo.
Hay un ejemplo en la página de MSDN para DataTable.WriteXml () que puede resultarle útil.
He probado una forma sencilla de guardar datagridview en 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 dicho archivo en una vista de cuadrícula de datos:
//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();
}
}
}
Considere que asumí que el control de vista de cuadrícula de datos 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.