如何序列控制(How to serialize controls)

2019-07-28 22:30发布

我们有一个包含数据库,XML文件的应用程序。 它有客户服务器结构。 因此,这里的服务器将使用的数据集读取XML文件中的数据并将其存储在XML模式。 然后,服务器将序列化的数据,并将其传递到UI(客户端)。所以UI数据的由右顶部的PropertyGrid在右下方上莱夫特赛德,列表视图用树视图显示。

数据在UI被归类到类和对象。 所以,现在我们已经在我们的数据库中的XML文件machinesclass.xml和machineobjects.xml。 machinesclass.xml包含各种类,如电子类,计算机类里面,agriculturetool类等,并machineobjects.xml包含电视,电脑的Pentium4,Tractror等,所以现在在UI如果我选择从树状电子节点,它会列出电视,收音机,电话等什么都反对它包含在右上部分使用ListView和如果我选择对象“TV”的电视相关的属性在右侧底部的PropertyGrid所示。

所以现在我们有一个任务,如果有人想夺回了从UI中选择的对象在XML文件(.XML)方面,从父machinesclass.xml和machineobjects.xml

对于如果有人从UI列表视图选择电视,并希望在.xml文件(tv.xml)的范围,采取备份,这样之后的某个时间,他可以导入数据,什么逻辑,我们可以实现在此例子吗? 我可以序列ListView和PropertyGrid中,或有任何选项来做到这一点? 这是一个位的代码,我使用的UI中复制粘贴操作

Answer 1:

我可以序列ListView和PropertyGrid中,或有任何选项来做到这一点?

下面是如何序列化一个ListView:
http://www.codeproject.com/Articles/3335/Persist-ListView-settings-with-serialization

以下是如何序列化的PropertyGrid:
http://www.codeproject.com/Articles/27326/Load-and-Save-Data-Using-PropertyGrid

我的建议是正确地做到这一点,我认为正确的解决办法是序列化的ListView和PropertyGrid的绑定过的业务对象。 从GUI分离业务逻辑,那么它真的很容易

编辑 (后OP编辑的问题,以显示代码):

保存数据的XML文件:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter BinFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.FileStream FS = new System.IO.FileStream("C:\\tv.xml", IO.FileMode.Create);
BinFormatter.Serialize(FS, new ArrayList(listview1.Items));
FS.Close();

在从XML文件中读取数据:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter BinFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
string fname;
System.IO.FileStream FS = new System.IO.FileStream("C:\\tv.xml", IO.FileMode.Open);
listview1.Items.AddRange(BinFormatter.Deserialize(FS).ToArray(typeof(ListViewItem)));
FS.Close();

这里是你如何用PropertyGrid中做到这一点: PropertyGrid.Serialize



文章来源: How to serialize controls