如何把winform中的控件的所有数据存储起来

ifdone 2008-08-05 07:30:59
我有一个winform里面有很多静态的datagridview控件,没有绑定数据,当作电子表格用的.我如何把当前输入到datagridview控件中的数据以某种设计的格式(如后缀名为.csdn)存储起来,当我打开后缀为.csdn的文件时,winform界面显示的是存储时的状态,datagridview的数据为存储时的数据,分不够我还会加的.请教.
...全文
516 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDNCFO 2011-02-26
  • 打赏
  • 举报
回复
二进制序列化和返序列化可以完全恢复原貌;
CSDNCFO 2011-02-26
  • 打赏
  • 举报
回复
一定是二进制序列化,XML序列化会受到一些限制;
CSDNCFO 2011-02-26
  • 打赏
  • 举报
回复
给个思路看看合适不:

自定义一个可序列化的类,其中包含两个字段,格式字段,数据字段;序列化这个实例,下子加载窗体反序列化得到这些实例赋值上就应该可以了吧?

[Serializable]
public class MyData
{
public DataGridView MyView;
//可以是任何类型,比如View的DataTable格式的数据等
public Object MyData;
}

Fun: SaveData(MyData data)
{
BinSerMyData....->二进制方式序列化数据存储
}

Fun:ReadData(out MyData data)
{
BinDeSer-->MyData
}
lpcjj1122 2008-08-06
  • 打赏
  • 举报
回复
写个类.专门存储数据.
序列化此类.
存储到本地文件.
再见品月 2008-08-06
  • 打赏
  • 举报
回复
出力到CSV文件里。。
ifdone 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lovemay520 的回复:]
引用 4 楼 virusplayer 的回复:
先关内容保存xml文档
处理方便,不用数据库了,数据量又不大
少量使用xml方便,大量的数据处理就要用数据库了
[/Quote]
有这方面的例子代码么?看了一些文章http://blog.163.com/fengzijun_2005/blog/static/332290532008321504899/,都是对自己定义的类的里面的字段进行序列化.我现在想做到的是,在一个form1中,有一个datagridview控件,2个textbox控件,两个button控件,我在datagridview控件,textbox控件输入数据后,点击存储的button,就把当前控件的状态存储起来为一个自定的后缀名如.csdn,用打开button打开刚刚存储的文件.csdn文件,form1就恢复到存储时的状态.在form1类中,都是控件,也没有自己的字段变量,我怎么把form1中的控件序列化?
GhostAdai 2008-08-06
  • 打赏
  • 举报
回复
数据量小就用XML好了。
张扬的狄仁杰 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 virusplayer 的回复:]
先关内容保存xml文档
处理方便,不用数据库了,数据量又不大
少量使用xml方便,大量的数据处理就要用数据库了
[/Quote]
ifdone 2008-08-06
  • 打赏
  • 举报
回复
谢谢paulin.数据存储的都好处理,主要是我还对datagridview表格中的背景色以及.Style.Alignment等做了设置,这样存储起来手动写的细节太多了.看来是没什么好办法了,只能用笨方法一点点写了.迟点给分,看看有没有人能给个更简单的方法或是思路.
paulin 2008-08-06
  • 打赏
  • 举报
回复
当然获得了数据集,一般绑定方法也是单独拿出来处理的,我上面为了图简便省去了
paulin 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ifdone 的回复:]
引用 11 楼 lpcjj1122 的回复:
写个类.专门存储数据.
序列化此类.
存储到本地文件.

我现在就是这么想的,但是一个datagridview控件中cell的数据提取,以及每个cell的宽度,背景颜色等的提取量还是很大的.c#中没有能把当前的控件的各种状态参数(如输入的数据,宽度,颜色等数据)以某种简单方式存储起来,然后可以调用的方法么?
我怎么把当前的datagridview中的输入数据提取成DataTabale的数据格式?论坛上有人提到这个问题,没…
[/Quote]
是的,如果保存类型比较复杂繁多的话,需要动态保存每一个细节的话,
就需要自己创建不同的节点,可以参看我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 当然我这里的路径都是写死的,楼主这里可以从配置文件中读取或其他方式

ifdone 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lpcjj1122 的回复:]
写个类.专门存储数据.
序列化此类.
存储到本地文件.
[/Quote]
我现在就是这么想的,但是一个datagridview控件中cell的数据提取,以及每个cell的宽度,背景颜色等的提取量还是很大的.c#中没有能把当前的控件的各种状态参数(如输入的数据,宽度,颜色等数据)以某种简单方式存储起来,然后可以调用的方法么?
我怎么把当前的datagridview中的输入数据提取成DataTabale的数据格式?论坛上有人提到这个问题,没有解决.
DataTable dt = (DataTable)dataGridView1.DataSource;//不能数据传到dt中
hustcyb 2008-08-05
  • 打赏
  • 举报
回复
这种情况采用备忘录模式比较方便,你可以到网上搜索备忘录的资料,至于具体的实现技术,你可以控件中的数据保存在INI文件中,或保存在注册表中,或保存在数据库,看你的选择了
ifdone 2008-08-05
  • 打赏
  • 举报
回复
我的是winform程序,楼上各位兄弟说的是winform的程序么?本人比较菜,最好给个详细的例子(比如单个的datagriview表格为20*20的数据存储),或是相关的资料网址.谢谢.
virusswb 2008-08-05
  • 打赏
  • 举报
回复
先关内容保存xml文档
处理方便,不用数据库了,数据量又不大
少量使用xml方便,大量的数据处理就要用数据库了
阿牛138588 2008-08-05
  • 打赏
  • 举报
回复
一般情况,你可将datagridview的endedit事件中动态将数据保存在一个表(datatable)中
然后使用表的WriteXml方法写到文件,在需要读出时使用表的ReadXml方法读出来,再直接绑定到datagridview就可以了
paulin 2008-08-05
  • 打赏
  • 举报
回复
关闭窗体时,读取窗体的要存储的数据存放xml对于节点中。
对应节点中...
paulin 2008-08-05
  • 打赏
  • 举报
回复
我觉得存储在xml中更方便操作
楼主可以在xml中定义几个重要的区分节点,比如form名称,control名称,对应的列名称等
关闭窗体时,读取窗体的要存储的数据存放xml对于节点中。
下次窗体开启时,在Load事件中读取xml中存储的数据显示就好了。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧