我有一个winform里面有很多静态的datagridview控件,没有绑定数据,当作电子表格用的.我如何把当前输入到datagridview控件中的数据以某种设计的格式(如后缀名为.csdn)存储起来,当我打开后缀为.csdn的文件时,winform界面显示的是存储时的状态,datagridview的数据为存储时的数据,分不够我还会加的.请教.

解决方案 »

  1.   

    我觉得存储在xml中更方便操作
    楼主可以在xml中定义几个重要的区分节点,比如form名称,control名称,对应的列名称等
    关闭窗体时,读取窗体的要存储的数据存放xml对于节点中。
    下次窗体开启时,在Load事件中读取xml中存储的数据显示就好了。
      

  2.   

    关闭窗体时,读取窗体的要存储的数据存放xml对于节点中。
    对应节点中...
      

  3.   

    一般情况,你可将datagridview的endedit事件中动态将数据保存在一个表(datatable)中
    然后使用表的WriteXml方法写到文件,在需要读出时使用表的ReadXml方法读出来,再直接绑定到datagridview就可以了
      

  4.   

    先关内容保存xml文档
    处理方便,不用数据库了,数据量又不大
    少量使用xml方便,大量的数据处理就要用数据库了
      

  5.   

    我的是winform程序,楼上各位兄弟说的是winform的程序么?本人比较菜,最好给个详细的例子(比如单个的datagriview表格为20*20的数据存储),或是相关的资料网址.谢谢.
      

  6.   

    这种情况采用备忘录模式比较方便,你可以到网上搜索备忘录的资料,至于具体的实现技术,你可以控件中的数据保存在INI文件中,或保存在注册表中,或保存在数据库,看你的选择了
      

  7.   

    有这方面的例子代码么?看了一些文章http://blog.163.com/fengzijun_2005/blog/static/332290532008321504899/,都是对自己定义的类的里面的字段进行序列化.我现在想做到的是,在一个form1中,有一个datagridview控件,2个textbox控件,两个button控件,我在datagridview控件,textbox控件输入数据后,点击存储的button,就把当前控件的状态存储起来为一个自定的后缀名如.csdn,用打开button打开刚刚存储的文件.csdn文件,form1就恢复到存储时的状态.在form1类中,都是控件,也没有自己的字段变量,我怎么把form1中的控件序列化?
      

  8.   

    我现在就是这么想的,但是一个datagridview控件中cell的数据提取,以及每个cell的宽度,背景颜色等的提取量还是很大的.c#中没有能把当前的控件的各种状态参数(如输入的数据,宽度,颜色等数据)以某种简单方式存储起来,然后可以调用的方法么?
    我怎么把当前的datagridview中的输入数据提取成DataTabale的数据格式?论坛上有人提到这个问题,没有解决.
    DataTable dt = (DataTable)dataGridView1.DataSource;//不能数据传到dt中
      

  9.   

    是的,如果保存类型比较复杂繁多的话,需要动态保存每一个细节的话,
    就需要自己创建不同的节点,可以参看我1楼的描述。但是你的窗体运行时,每个cell的宽度就是对应的列宽而已,背景色难道楼主还做了自动设置功能,否则这个信息不需要保存。如果楼主只是保存datagridview中数据的话,的确是简单很多,也不需要自己创建其它节点,可以参看我下面的一个简单过程: private void SetDataGridView()
            {
                DataSet ds = new DataSet();
                DataTable dt = new DataTable();
                DataRow dtrow;
                //创建对应你Datagridview中列的Name
                dt.Columns.Add("ID");
                dt.Columns.Add("Name");
                dt.Columns.Add("Sex");            foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    dtrow = dt.NewRow();
                    dtrow["ID"] = row.Cells["ID"].Value;
                    dtrow["Name"] = row.Cells["Name"].Value;
                    dtrow["Sex"] = row.Cells["Sex"].Value;                dt.Rows.Add(dtrow);
                }            ds.Tables.Add(dt);            ds.WriteXml(@"D:\DataGridView.xml");
            }可以在窗体关闭时,FormClosing事件中执行此方法 private void GetDataGridView()
            {            DataSet ds = new DataSet();
                ds.ReadXml(@"D:\DataGridView.xml");
                //如果
                dataGridView1.Columns.Clear();            dataGridView1.DataSource = ds.Tables[0];
            }在Form_Load事件中执行此方法填充数据ps 当然我这里的路径都是写死的,楼主这里可以从配置文件中读取或其他方式
      

  10.   

    谢谢paulin.数据存储的都好处理,主要是我还对datagridview表格中的背景色以及.Style.Alignment等做了设置,这样存储起来手动写的细节太多了.看来是没什么好办法了,只能用笨方法一点点写了.迟点给分,看看有没有人能给个更简单的方法或是思路.
      

  11.   

    给个思路看看合适不:   自定义一个可序列化的类,其中包含两个字段,格式字段,数据字段;序列化这个实例,下子加载窗体反序列化得到这些实例赋值上就应该可以了吧?   [Serializable]
       public class MyData
       {
          public DataGridView MyView;
          //可以是任何类型,比如View的DataTable格式的数据等
          public Object MyData;
       }   Fun: SaveData(MyData data)
       {
          BinSerMyData....->二进制方式序列化数据存储
       }   Fun:ReadData(out MyData data)
       {
          BinDeSer-->MyData
       } 
      

  12.   

    一定是二进制序列化,XML序列化会受到一些限制;