轉帖|使用教程|編輯:鮑佳佳|2020-07-14 16:22:17.190|閱讀 639 次
概述:本文主要介紹ComponentOne中的CalcEngine控件的使用極其功能,比如CalcEngine的入門教程、使用數據綁定跨數據源執行計算、處理多個數據集等。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
ComponentOne Enterprise 是一套專注于企業.NET開發、支持 .NET Core 平臺,并完美集成于 Visual Studio 的第三方控件集,包含300多種.NET開發控件,可滿足WinForm、WPF、UWP、ASP.NET MVC等七個.NET平臺下的系統開發需求,并提供 表格數據管理、 數據可視化、 報表和文檔、 日程安排、 輸入和編輯、 導航和布局、 系統提升工具等七大功能,被譽為“.NET開發的‘瑞士軍刀’”。ComponentOne中的CalcEngine是一個.NET標準庫,可以在任何平臺運行時分析和表達的評估上使用。
點擊下載ComponentOne Studio Enterprise最新試用版
該庫可用于:CalcEngine可用于ComponentOne中的所有.NET平臺,并且該庫作為nuget.org上的NuGet包提供。您也可以通過安裝WinForms Edition獲得示例代碼。在本文中,我們將逐步介紹CalcEngine的主要功能,并展示它們如何工作。
CalcEngine入門
要開始使用CalcEngine,請創建一個.NET Framework 4.6.2+或.NET Core應用程序,然后將nuget.org中的C1.CalcEngine NuGet包添加到項目中。
創建簡單表達式
如果您曾經使用過Excel,則使用CalcEngine創建和評估表達式非常簡單明了。在這里,我們演示如何創建分配給CalcEngine的Expression屬性的簡單表達式,以及如何使用Evaluate函數獲取結果。
var calcEngine = new C1CalcEngine(); calcEngine.Expression = “5+2”; var result = calcEngine.Evaluate()
CalcEngine還支持帶有函數的更復雜的表達式。它支持Excel中的文本,日期時間,數學,邏輯,轉換和聚合函數,以及各種常量和運算符。
使用數據綁定跨數據源執行計算
CalcEngine可以綁定到列表,數組或數據表等數據源。這有助于在對象和數據字段的集合上執行計算。在這里,我們有一個Store對象的集合,并使用CalcEngine將表達式應用于整個集合或單個對象。
public class Store { public int StoreId { get; set; } public double Sales { get; set; } } var collection = new List() { new Store { StoreId = 27, Sales = 150000.00 }, new Store { StoreId = 15, Sales = 20000.00 } }; // 1\. When you have to apply expression over an object: var engine = new ?C1CalcEngine (); engine.DataSource = collection[0]; engine.Expression = "[Sales]*2";
// 2\. When you have collection and aggregate function: var engine = new ?C1CalcEngine (); engine.DataSource = collection; engine.Expression = "Sum([Sales])"; var result = engine.Evaluate();
// 3\. When you have collection and need evaluate one entry: var engine = new C1CalcEngine(); engine.DataSource = collection; engine.CurrentIndex = 1; engine.Expression = "[Sales] / Sum([Sales])"; var result = engine.Evaluate();
處理多個數據收集
當信息分散到多個集合中時,很難一起處理這些數據。這是交叉引用會有所幫助的地方。在這種情況下,可以使用內置的Excel引擎的跨工作表引用。在交叉表引用中,單元格引用包括對另一個表中單元格的引用。
與Excel一樣,它可以用在公式中,在該公式中輸入目標工作表的名稱,然后在單元格引用或單元格范圍引用之前輸入一個驚嘆號(!)。calcEngine.Expression = "=Sum(Sheet1!A3:B7) + Sum(Sheet2!A3:B7)";為了能夠創建上述表達式,每個數據源都應從實現GetValue()函數的IDataSheet派生:
public class SheetTable : DataTable, IDataSheet { public string Name { get => TableName; set => TableName = value; } public object GetValue(int col, int row) { return Rows[row][col]; } }在這里,GetValue從特定的行或列返回一個值。
//Method to generate data for C1CalcEngine private const string columnNames = "ABCDEF"; var sheet1 = GetDataTable("Sheet1"); var sheet2 = GetDataTable("Sheet2"); public static SheetTable GetDataTable(string sheetName) { var table = new SheetTable(); table.Name = sheetName; foreach (var col in columnNames) table.Columns.Add(col.ToString(), typeof(int)); for (int i = 0; i < 100; i++) table.Rows.Add(new object[] { i * 2, i * 3, i * 4, i * 5, i * 6, i * 7 }); return table; }最后,可以如下創建跨表表達式:
C1CalcEngine calcEngine = new C1CalcEngine(); calcEngine.DataSource = new List下圖顯示了交叉表引用的示例,其中從單元格引用中解析了表達式。{ sheet1, sheet2 }; //Assign the cross sheet reference expression to be calculated by C1CalcEngine calcEngine.Expression = "=Sum(Sheet1!A3:B7) + Sum(Sheet2!A3:B7)"; //Invoke the TryEvaluate method of C1CalcEngine to calculate the expression var res = calcEngine.TryEvaluate(out object result) ? result.ToString() : calcEngine.GetErrors().FirstOrDefault()?.FullMessage ?? "";
ComponentOne CalcEngine是一個功能強大的庫,可以解決許多業務用例。componentone calcengine是一個功能強大的庫,可以解決許多業務用例。歡迎使用,有任何問題歡迎回帖討論
本文轉載自葡萄城!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: