我需要使用這種結構生成報告 csv
public class ReportColumn
{
public string Name { get; set; }
public List<string> Childs { get; set; } = new List<string>();
}
到這個 CSV 結構
Header field 1; Header field 2; Header field 3
lorem ipsum; lorem ipsum; lorem ipsum;
lorem ipsum; lorem ipsum; lorem ipsum;
我的困難是將正確的行欄位與他們的列父關聯
public string DrawCsv(List<ReportColumn> reportColumns)
{
}
uj5u.com熱心網友回復:
這似乎是不可能的=)
CSV 是一種面向行的結構。您需要重新組織資料。
例如,創建一個與您的行對應的模型:
public class ReportRow
{
[Description("Name 1")]
public string Column1 { get; set; }
[Description("Name 2")]
public string Column2 { get; set; }
[Description("Name 3")]
public string Column3 { get; set; }
}
在這種情況下,生成 CSV 字串的方法將是:
public static string DrawCsv(List<ReportRow> rows, bool showHeader = false)
{
var result = string.Empty;
if (showHeader)
{
var header = string.Empty;
var r = rows.First();
foreach (var prop in r.GetType().GetProperties())
{
DescriptionAttribute attr = (DescriptionAttribute)prop.GetCustomAttributes(typeof(DescriptionAttribute), true)[0];
header = attr.Description "; ";
}
result = header.TrimEnd() Environment.NewLine;
}
foreach (var row in rows)
{
var line = string.Empty;
foreach (var prop in row.GetType().GetProperties())
{
line = prop.GetValue(row) "; ";
}
result = line.TrimEnd() Environment.NewLine;
}
return result;
}
DescriptionAttribute您可以避免為列命名創建特殊欄位。現在我們可以測驗一下:
var reportRows = new List<ReportRow>
{
new ReportRow { Column1 = "Lorem ipsum 1", Column2 = "dolor sit 1", Column3 = "amet 1" },
new ReportRow { Column1 = "Lorem ipsum 2", Column2 = "dolor sit 2", Column3 = "amet 2" },
new ReportRow { Column1 = "Lorem ipsum 3", Column2 = "dolor sit 3", Column3 = "amet 3" }
};
var str = DrawCsv(reportRows, true);
結果將是:
Name 1; Name 2; Name 3;
Lorem ipsum 1; dolor sit 1; amet 1;
Lorem ipsum 2; dolor sit 2; amet 2;
Lorem ipsum 3; dolor sit 3; amet 3;
希望對你有幫助 =)
uj5u.com熱心網友回復:
您可以使用 DataTables 中的檔案匯出功能來支持將檔案和報告匯出為 csv、xlsx (excel) 和 pdf 擴展名。
這是官方檔案中的操作方法:https ://datatables.net/extensions/buttons/examples/initialisation/export.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/495202.html
