C # - сохранение DataGridView в файл и загрузка - PullRequest
7 голосов
/ 01 июня 2010

Для начала, у меня есть простое приложение Winforms, просто кнопка сохранения и загрузки и элемент управления сеткой данных для хранения данных. То, что я хочу сделать, это ввести некоторые данные в элемент управления, нажать кнопку «Сохранить», и он сохранит все данные в файл локально на компьютере, а когда я нажму «загрузить», он загрузит файл и заполнит элемент управления соответствующим образом, сохраняя все строки, столбцы и данные такие же, как при сохранении.

Хотя это звучит довольно просто для меня, я не могу найти хороший способ сохранить и загрузить данные. Могу ли я получить несколько указателей или примеров, чтобы начать себя?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 01 июня 2010

Привязать DataGridView к DataTable и использовать DataTable ReadXml() и WriteXml() методы для чтения и записи данных в файл.

Если у вас когда-либо есть несколько сеток, связанных с несколькими связанными таблицами, вы можете представить схему с помощью DataSet и использовать методы DataSet ReadXml() и WriteXml() для чтения и записи всей схемы.

На странице MSDN есть пример для DataTable.WriteXml () , который может оказаться полезным.

3 голосов
/ 03 июля 2012

Я опробовал простой способ сохранить 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 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();
          }
     }
} 

Учтите, что я предположил, что элемент управления сеткой данных имеет фиксированные столбцы, в вашей конкретной ситуации вам следует добавить несколько кодов для вставки новых столбцов или создания нового вида сетки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...