轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2020-07-14 16:22:17.190|閱讀 639 次
概述:本文主要介紹ComponentOne中的CalcEngine控件的使用極其功能,比如CalcEngine的入門教程、使用數(shù)據(jù)綁定跨數(shù)據(jù)源執(zhí)行計(jì)算、處理多個(gè)數(shù)據(jù)集等。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
ComponentOne Enterprise 是一套專注于企業(yè).NET開發(fā)、支持 .NET Core 平臺(tái),并完美集成于 Visual Studio 的第三方控件集,包含300多種.NET開發(fā)控件,可滿足WinForm、WPF、UWP、ASP.NET MVC等七個(gè).NET平臺(tái)下的系統(tǒng)開發(fā)需求,并提供 表格數(shù)據(jù)管理、 數(shù)據(jù)可視化、 報(bào)表和文檔、 日程安排、 輸入和編輯、 導(dǎo)航和布局、 系統(tǒng)提升工具等七大功能,被譽(yù)為“.NET開發(fā)的‘瑞士軍刀’”。ComponentOne中的CalcEngine是一個(gè).NET標(biāo)準(zhǔn)庫,可以在任何平臺(tái)運(yùn)行時(shí)分析和表達(dá)的評(píng)估上使用。
點(diǎn)擊下載ComponentOne Studio Enterprise最新試用版
該庫可用于:CalcEngine可用于ComponentOne中的所有.NET平臺(tái),并且該庫作為nuget.org上的NuGet包提供。您也可以通過安裝WinForms Edition獲得示例代碼。在本文中,我們將逐步介紹CalcEngine的主要功能,并展示它們?nèi)绾喂ぷ鳌?
CalcEngine入門
要開始使用CalcEngine,請(qǐng)創(chuàng)建一個(gè).NET Framework 4.6.2+或.NET Core應(yīng)用程序,然后將nuget.org中的C1.CalcEngine NuGet包添加到項(xiàng)目中。
創(chuàng)建簡單表達(dá)式
如果您曾經(jīng)使用過Excel,則使用CalcEngine創(chuàng)建和評(píng)估表達(dá)式非常簡單明了。在這里,我們演示如何創(chuàng)建分配給CalcEngine的Expression屬性的簡單表達(dá)式,以及如何使用Evaluate函數(shù)獲取結(jié)果。
var calcEngine = new C1CalcEngine(); calcEngine.Expression = “5+2”; var result = calcEngine.Evaluate()
CalcEngine還支持帶有函數(shù)的更復(fù)雜的表達(dá)式。它支持Excel中的文本,日期時(shí)間,數(shù)學(xué),邏輯,轉(zhuǎn)換和聚合函數(shù),以及各種常量和運(yùn)算符。
使用數(shù)據(jù)綁定跨數(shù)據(jù)源執(zhí)行計(jì)算
CalcEngine可以綁定到列表,數(shù)組或數(shù)據(jù)表等數(shù)據(jù)源。這有助于在對(duì)象和數(shù)據(jù)字段的集合上執(zhí)行計(jì)算。在這里,我們有一個(gè)Store對(duì)象的集合,并使用CalcEngine將表達(dá)式應(yīng)用于整個(gè)集合或單個(gè)對(duì)象。
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();
處理多個(gè)數(shù)據(jù)收集
當(dāng)信息分散到多個(gè)集合中時(shí),很難一起處理這些數(shù)據(jù)。這是交叉引用會(huì)有所幫助的地方。在這種情況下,可以使用內(nèi)置的Excel引擎的跨工作表引用。在交叉表引用中,單元格引用包括對(duì)另一個(gè)表中單元格的引用。
與Excel一樣,它可以用在公式中,在該公式中輸入目標(biāo)工作表的名稱,然后在單元格引用或單元格范圍引用之前輸入一個(gè)驚嘆號(hào)(!)。calcEngine.Expression = "=Sum(Sheet1!A3:B7) + Sum(Sheet2!A3:B7)";為了能夠創(chuàng)建上述表達(dá)式,每個(gè)數(shù)據(jù)源都應(yīng)從實(shí)現(xiàn)GetValue()函數(shù)的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從特定的行或列返回一個(gè)值。
//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; }最后,可以如下創(chuàng)建跨表表達(dá)式:
C1CalcEngine calcEngine = new C1CalcEngine(); calcEngine.DataSource = new List下圖顯示了交叉表引用的示例,其中從單元格引用中解析了表達(dá)式。{ 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是一個(gè)功能強(qiáng)大的庫,可以解決許多業(yè)務(wù)用例。componentone calcengine是一個(gè)功能強(qiáng)大的庫,可以解決許多業(yè)務(wù)用例。歡迎使用,有任何問題歡迎回帖討論
本文轉(zhuǎn)載自葡萄城!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: