【问题标题】:C# - Saving a DataGridView to file and loadingC# - 将 DataGridView 保存到文件并加载
【发布时间】:2010-06-01 18:14:39
【问题描述】:

首先,我有一个简单的 Winforms 应用程序,只有一个保存和加载按钮,以及一个 datagridview 控件来保存数据。我要做的是在控件中输入一些数据,点击保存按钮,然后将所有数据保存到计算机本地的文件中,当我点击加载时,它会加载文件并适当地填充控件,保持所有行、列和数据都与保存时相同。

虽然这对我来说听起来很简单,但我似乎无法找到一种保存和加载数据的好方法。我可以得到一些提示或示例来帮助自己入门吗?

谢谢。

【问题讨论】:

    标签: c# datagridview


    【解决方案1】:

    将 DataGridView 绑定到 DataTable,并使用 DataTable ReadXml()WriteXml() 方法来读取和写入数据到文件。

    如果您曾经将多个网格绑定到多个相关表,则可以使用 DataSet 表示架构,并使用 DataSet 的 ReadXml()WriteXml() 方法来读取和写入整个架构。

    在 MSDN 页面上有一个DataTable.WriteXml() 的示例,您可能会觉得有帮助。

    【讨论】:

      【解决方案2】:

      我测试了一种将 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();
                }
           }
      } 
      

      考虑到我假设 datagridview 控件具有固定列,在您的特定情况下,您应该添加一些代码来插入新列或创建新的 gridview。

      【讨论】:

        猜你喜欢
        • 2013-03-27
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 2014-11-20
        • 2022-11-16
        • 1970-01-01
        • 2014-11-18
        相关资源
        最近更新 更多