在项目中遇到一个模块,需要实现功能:
第一个功能要求是有一个甘特图显示模块A,显示的项目中的每个工作的进度以及该工作的其他基本信息,
模块的另外一个功能要求是模块管理人员要一个配置模块B,通过B来设置A的显示方式,
包括设置数据源,显示字段,以及在数据源的基础上进行过滤,显示甘特图的颜色以及每个甘特条上显示的文字信息, 甘特条的高度,哪两个字段表示时间字段(计划)等一些将来用户提出的额外显示功能。
刚开始的时候是是这样考虑,把每种样式对应一个数据库字段,但是很快就发现这样不行,一是数据源不定,数据项也不定,二是经常要改动显示的信息,所以就想把样式用一个xml来保存,用一张表来保存一些类似的样式,不同的信息样式用不同的表来区分并保存,然后把这些表添加到一个DataSet中转换为xml文件,以后用户需要添加额外的信息,在配置工具B中添加相应得Table即可,对之前的工作不用做任何修改。在显示甘特图的时候,读取数据和数据显示样式可能会比较好,因为从xml文件读取也比较方便。至于样式数据怎么保存到数据库,可以直接从DataSet到字节数组进行转换,也可以借助临时生成xml文件,再转换成字节数组。
这样就遇到DataSet 到xml文件或字节数组的互换的问题,
企业库提供了转换的方法,这里做一个小结
1.DataSet到xml文件或字节数组的转换
DataSet的WriteXml方法有很多重载,
总的来讲,从DataSet到xml的转换分为4种
DataSet --- xml
--- stream abstract class
--- textwriter [Serializable]public abstract class TextWriter
--- xmlwriter public abstract class XmlWriter
m_Ds.WriteXml(输出类型);
m_Ds.WriteXml(输出类型,XmlWriteMode.DiffGram);
XmlWriteMode参数信息
DiffGram:对DataSet修改的原值以及新值
IgnoreSchema:数据
WriteSchema:结构+数据
2.从xml文件或字节数组到DataSet转换
这个过程是DataSet到文件或字节数组转换的逆过程
文件或二进制数据到DataSet的转换前提是文件或字节数组应该是符合标准的,也是主要从4个类型转换
xml --- DataSet
stream
textreader
xmlreader
m_Ds.ReadXml(读入类型);
m_Ds.ReadXml(读入类型,System.Data.XmlReadMode.IgnoreSchema);
System.Data.XmlReadMode参数详细信息请参阅MSDN.
我在处理的时候是这样用的:
DataSet--------------〉字节数组
保存字节数组到数据库省略
字节数组------------DataSet
从数据库读取字节数组(_sStyleInfo)省略
因为之前对C#来解析一些不规则的xml文档,我自己还没有实践过,觉得.Net提供的DataSet功能挺方便的。以上是自己的体会,有欠缺的地方,还请各位指点。