DataSet的XML文件读写


   public class PrintConfigureInfo
    {
        public string Guid { get; set; }

        /// <summary>
        /// 模板名
        /// </summary>
        public string ReportName { get; set; }

        /// <summary>
        /// 模板路径
        /// </summary>
        public string ReportFile { get; set; }

        /// <summary>
        /// 服务名
        /// </summary>
        public string SolutionName { get; set; }

        /// <summary>
        /// 单据类型
        /// </summary>
        public OrderTypeEnum OrderTypeName { get; set; }

        /// <summary>
        /// 条件名
        /// </summary>
        public string ConditionName { get; set; }

        /// <summary>
        /// VO头
        /// </summary>
        public HeaderVoEnum HeaderVo { get; set; }

        /// <summary>
        /// VO明细
        /// </summary>
        public DetailVoEnum DetailVo { get; set; }

        /// <summary>
        /// 优先级
        /// </summary>
        public string Priority { get; set; }
        
        /// <summary>
        /// 报表类型
        /// </summary>
        public ReportTypeEnum ReportTypeName { get; set; }

        /// <summary>
        /// 子报表
        /// </summary>
        public string SubReportName { get; set; }
    }

一、写入XML:

        /// <summary>
        /// 生成LayoutXML文件,其中PrintConfigureInfo 是一个类,layoutFileList的每一个对象都会生成一个节点
        /// </summary>
        private void Save2DataSet(List<PrintConfigureInfo> layoutFileList, string filePath)
        {
            if (!Directory.Exists(ReportConstInfo.ReportPath))
                Directory.CreateDirectory(ReportConstInfo.ReportPath);

            var ds = new DataSet();
            var dataTable = Tools.GetObjectDataTable<PrintConfigureInfo>(layoutFileList);
            dataTable.TableName = "ReportConfig"
            ds.Tables.Add(dataTable);
            ds.WriteXml(filePath, XmlWriteMode.IgnoreSchema);
        }

        /// <summary>
        /// 把objcet转换成dataTable返回
        /// </summary>
        public static DataTable GetObjectDataTable<OutputType>(object oo) where OutputType : class
        {
            if (oo != null)
            {
                return ObjectConvertor.ToDataTable(oo, typeof(OutputType));
            }
            return null;
        }


效果:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <ReportConfig>
    <Guid>278527ba-f8bb-411d-b85c-7b8e89cae4e3</Guid>
    <ReportName>长沙李宁验货交接单</ReportName>
    <SolutionName>SoReceiptReport_YiDong</SolutionName>
    <OrderTypeName>5</OrderTypeName>
    <HeaderVo>1</HeaderVo>
    <DetailVo>1</DetailVo>
    <Priority>99</Priority>
    <ReportTypeName>0</ReportTypeName>
    <SubReportName>长沙李宁验货交接单-组合</SubReportName>
  </ReportConfig>
  <ReportConfig>
    <Guid>8508a0c8-7036-49ea-9417-c343d33d94ad</Guid>
    <ReportName>长沙李宁合并拣货指导单</ReportName>
    <SolutionName>MergePickupInstructReport_Common</SolutionName>
    <OrderTypeName>8</OrderTypeName>
    <ConditionName />
    <HeaderVo>1</HeaderVo>
    <DetailVo>5</DetailVo>
    <Priority>1</Priority>
    <ReportTypeName>0</ReportTypeName>
  </ReportConfig>
</NewDataSet>


二、读取XML:

        /// <summary>
        /// 从配置文件读取列表
        /// </summary>
        private List<PrintConfigureInfo> GetConfigureListFromXml(string reportConfigPath)
        {
            if (File.Exists(reportConfigPath))
            {
                var ds = new DataSet();
                ds.ReadXml(reportConfigPath);
                var dt = ds.Tables["ReportConfig"];

                return SetDataTableToList<PrintConfigureInfo>(dt);
            }
            return new List<PrintConfigureInfo>();
        }

        /// <summary>
        /// 把dataTable,转换成objectList返回
        /// </summary>
        public static List<TOutputType> SetDataTableToList<TOutputType>(DataTable dt) where TOutputType : class
        {
            var t = typeof(TOutputType);//获取对象类型  
            var ps = t.GetProperties();//获取所有属性

            var newlist = new List<TOutputType>();
            if (dt == null || dt.Rows.Count == 0) return newlist;
            
            foreach (DataRow dr in dt.Rows)
            {
                var obj = Activator.CreateInstance(t) as TOutputType;
                foreach (PropertyInfo pi in ps)
                {
                    if (!dt.Columns.Contains(pi.Name)) continue;
                    if (pi.PropertyType.IsEnum)
                    {
                        pi.SetValue(obj, Enum.Parse(pi.PropertyType, dr[pi.Name].ToString()), null);
                    }
                    else if (pi.PropertyType.Name == "Boolean")
                    {
                        pi.SetValue(obj, Boolean.Parse(dr[pi.Name].ToString()), null);
                    }
                    else
                    {
                        if (!Convert.IsDBNull(dr[pi.Name]))
                            pi.SetValue(obj, dr[pi.Name], null);
                    }
                }
                newlist.Add(obj);
            }
            return newlist;
        }





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值