多類型下載-格式刷子的實現

      在很多應用系統中,尤其是電子商務類應用系統,往往都會看到應用提供報表、不同數據格式的文件供用戶下載,自然提供下載的文件有多種多樣: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; }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章