翻譯|使用教程|編輯:鄭恭琳|2019-07-10 15:38:13.147|閱讀 675 次
概述:盡管FastReport.Net為我們提供了一個插件供報表設計者用作JSON文件的數據源,但它也并不是對所有人都合適的。此插件適用于表示單獨表的單級數據。如果數據具有多個嵌套級別,則必須嘗試其他解決方案。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
盡管FastReport.Net為我們提供了一個插件供報表設計者用作JSON文件的數據源,但它也并不是對所有人都合適的。此插件適用于表示單獨表的單級數據。如果數據具有多個嵌套級別,則必須嘗試其他解決方案。
例如,使用Newtonsoft.Json庫——在它的幫助下,您可以從JSON獲取數據,從中創建列表并在代碼報告中注冊它。
讓我們來看一個例子。我們要創建一個WinForms應用程序。在NuGet Manager的幫助下,安裝Newtonsoft.Json包。在參考“Reference”中,添加指向庫FastReport.dll的鏈接。
假設我們有商店經營的銷售數據。所有這些數據都在一個文件中,但事實上它們是三個不同的實體:商店,店長,導購。這將是我們這個例子的json文件:
{ "Shops": [{ "Name": "First shop", "Managers": [{ "Name": "John", "Phone": "45443446343", "Sales": [{ "GoodId": "1", "Amount": "3" }, { "GoodId": "2", "Amount": "5" }, { "GoodId": "3", "Amount": "2" } ] }, { "Name": "Boris", "Phone": "8787964387", "Sales": [{ "GoodId": "15", "Amount": "8" }, { "GoodId": "12", "Amount": "2" }, { "GoodId": "13", "Amount": "2" } ] } ] }, { "Name": "Second shop", "Managers": [{ "Name": "Julia", "Phone": "5555555555", "Sales": [{ "GoodId": "1", "Amount": "30" }] }, { "Name": "Helen", "Phone": "8787964387", "Sales": [{ "GoodId": "2", "Amount": "8" }, { "GoodId": "3", "Amount": "26" }, { "GoodId": "1", "Amount": "2" } ] } ] } ] }
要反序列化此數據,我們需要具有與JSON中的字段對應的屬性對象。
當然,如果JSON文檔具有非常深的嵌套,那么它可能會非常累人。因此,這里有一個優秀的Web服務//json2csharp.com/。您只需將有效的json放在輸入字段中,按“Generate”按鈕,然后獲取現成的C#類。對于我們的json文檔,將生成以下一組類:
public class Sale { public string GoodId { get; set; } public string Amount { get; set; } } public class Manager { public string Name { get; set; } public string Phone { get; set; } public List<Sale> Sales { get; set; } } public class Shop { public string Name { get; set; } public List<Manager> Managers { get; set; } } public class RootObject { public List<Shop> Shops { get; set; } }
讓我們為它們創建一個單獨的Sales.cs文件。
在表單中添加一個按鈕。對于click事件,我們將創建一個處理程序:
private void RunBtn_Click(object sender, EventArgs e) { var json = JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(@"Sales.json")); Report report = new Report(); report.RegisterData(json.Shops,"Shops"); report.Design(); }
如您所見,這里我們使用Newtonsoft.json庫將json反序列化為RootObject,它具有屬性Shops,這是一個商店列表。我們在報告中將此列表注冊為數據源。并啟用報表設計器“report designer”。使用單個按鈕運行我們的應用程序并單擊它。此時報表設計器顯示空白報表。選擇報告數據源:
根據此數據,創建報告模板:
如您所見,數據表“Data band”有一個子表,而該子表又有一個子數據表。
這些數據表上的數據根據數據源中的層次結構排列。運行報表:
這樣,我們在Master-Detail報告中就獲得了相關數據。我們不需要在表之間創建特殊關系來獲取依賴關系。在JSON中大量嵌套數據的情況下,最好使用我們以上考慮的方法。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn