在很多应用系统中,尤其是电子商务类应用系统,往往都会看到应用提供报表、不同数据格式的文件供用户下载,自然提供下载的文件有多种多样:EXCEL、CSV、TXT、PDF、WORD,甚至有更复杂的数据结构文档;本文主要介绍如何通过统一的数据集合,完成不同类型数据结构文档的转换,实现思路仅供参考!
§ 概述
主要工作在于适配不同的数据源为统一的数据接口类型,然后遍历数据源,根据传入的原始数据源列名反射获得列值,再顺序构造待下载结构文档。
§ 实现步骤

§ 示例代码
FileProvider provider = new FileProvider();
provider.DataSource = orders;
List<ColumnSetting> settings = new List<ColumnSetting>();
settings.Add(new ColumnSetting() { Format = "{0}", HeaderName = "创建时间", Index = 0, ObjectName = "TradeTime" });
settings.Add(new ColumnSetting() { Format = "{0}", HeaderName = "产品名称", Index = 1, ObjectName = "GoodsName" });
settings.Add(new ColumnSetting() { Format = "{0}", HeaderName = "订单号", Index = 2, ObjectName = "OrderNo" });
settings.Add(new ColumnSetting() { Format = "{0}", HeaderName = "交易号", Index = 3, ObjectName = "TradeNo" });
settings.Add(new ColumnSetting() { Format = "{0}", HeaderName = "交易对方", Index = 4, ObjectName = "TargetAccount" });
settings.Add(new ColumnSetting() { Format = "{0}", HeaderName = "买/卖", Index = 4, ObjectName = "TradeTypeName" });
settings.Add(new ColumnSetting() { Format = "{0}", HeaderName = "金额(元)", Index = 4, ObjectName = "OrderAmount" });
settings.Add(new ColumnSetting() { Format = "{0}", HeaderName = "状态", Index = 4, ObjectName = "TradeStatus" });
settings.Add(new ColumnSetting() { Format = "{0}", HeaderName = "备注", Index = 4, ObjectName = "Memo" });
string downString = provider.GetSourceFile(settings, cmd);
DownloadHelper.Instance.Down(cmd, downString, true);
public class ColumnSetting
{
/// <summary>
/// 列标题
/// </summary>
public string HeaderName { get; set; }
/// <summary>
/// 对应数据源中的实体名
/// </summary>
public string ObjectName { get; set; }
/// <summary>
/// 制定格式
/// </summary>
public string Format { get; set; }
public IFormatProvider Provider { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Index { get; set; }
}
248

被折叠的 条评论
为什么被折叠?



