多类型下载-格式刷子的实现

来源:互联网 发布:数据眼好看吗 编辑:程序博客网 时间:2024/04/28 17:33

      在很多应用系统中,尤其是电子商务类应用系统,往往都会看到应用提供报表、不同数据格式的文件供用户下载,自然提供下载的文件有多种多样: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; }    }