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;
}