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