如何從報(bào)表腳本FastReport .Net在矩陣中創(chuàng)建計(jì)算字段
【下載FastReport.Net最新版本】
通常,矩陣或其他匯總表用于會(huì)計(jì)和統(tǒng)計(jì)報(bào)表。讓我們確定摘要表是什么。
摘要表是一種軟件工具,允許您重新組織和匯總表中所選的列和行數(shù)據(jù),以獲取所需的報(bào)表。摘要表對(duì)于大量數(shù)據(jù)特別有用。例如,您正在經(jīng)營像文具店這樣的小型企業(yè)。您想知道哪些產(chǎn)品具有最佳銷售率,或者本月銷售最好記錄是什么。分析它們需要大量的統(tǒng)計(jì)數(shù)據(jù)是非常費(fèi)力的。這里有一個(gè)摘要表,它將一段時(shí)間內(nèi)的數(shù)據(jù)組合在一個(gè)表中。
處理用于創(chuàng)建匯總表的數(shù)據(jù)的主要操作是求和。但是,有時(shí)候,您可能需要自己的函數(shù)來計(jì)算某些列,例如總計(jì)。讓我們看一下使用報(bào)表腳本將計(jì)算字段添加到矩陣的方法示例。創(chuàng)建報(bào)表并將矩陣對(duì)象添加到“Data”區(qū)域。如您所知,要?jiǎng)?chuàng)建列,排水或單元格,您需要將表達(dá)式拖動(dòng)到相應(yīng)的區(qū)域。表達(dá)式可以是:數(shù)據(jù)字段,函數(shù),變量,總數(shù)。通常,數(shù)據(jù)面板中的任何對(duì)象。如果要從報(bào)表的腳本中填充矩陣,則將任何表達(dá)式添加到矩陣中,然后將其打開以進(jìn)行編輯并清除它,或輸入數(shù)字。這是矩陣的模板:
要以編程方式將字段添加到矩陣,您需要為矩陣創(chuàng)建AfterData事件處理程序。
讓我們繼續(xù)閱讀報(bào)表腳本。在生成的處理程序中,將列添加到矩陣:
Matrix1.AddValue(new Object[] { "Accruals", "Salary" }, new Object[] { "1" }, new Object[] { 1000}); Matrix1.AddValue(new Object[] { "Accruals", "Bonus" }, new Object[] { "1" }, new Object[] { 500}); Matrix1.AddValue(new Object[] { "Accruals", "Penalty" }, new Object[] { "1" }, new Object[] { 200}); Matrix1.AddValue(new Object[] { "Accruals", "Total" }, new Object[] { "1" }, new Object[] { 0}); Matrix1.AddValue(new Object[] { "Accruals", "Salary" }, new Object[] { "2" }, new Object[] { 500}); Matrix1.AddValue(new Object[] { "Accruals", "Bonus" }, new Object[] { "2" }, new Object[] { 300}); Matrix1.AddValue(new Object[] { "Accruals", " Penalty" }, new Object[] { "2" }, new Object[] { 250}); Matrix1.AddValue(new Object[] { "Accruals", "Total" }, new Object[] { "2" }, new Object[] { 0});
請(qǐng)注意,列標(biāo)題的結(jié)構(gòu)由名稱枚舉 - “費(fèi)用”,“薪水”給出。在我們的例子中,通用標(biāo)題“Charges”有4個(gè)副標(biāo)題()。接下來,我們創(chuàng)建一個(gè)標(biāo)題為1的行。第三個(gè)參數(shù)是數(shù)據(jù)單元new Object [] {1000}的值。 我們添加了兩行數(shù)據(jù)。“總計(jì)”字段的值為零?,F(xiàn)在我們需要為它設(shè)置一個(gè)值。我們?cè)谘h(huán)中遍歷矩陣的所有行并設(shè)置結(jié)果的值:
int[] rowIndices = Matrix1.Data.Rows.GetTerminalIndices(); for (int i = 0; i < rowIndices.Length; i++) { rowIndex = rowIndices[i]; SetValue("Accruals;Total", GetValue("Accruals;Salary") + GetValue("Accruals;Bonus") - GetValue("Accruals;Penalty")); }
將rowindex變量添加到類中: private int rowIndex; 請(qǐng)注意SetValue和GetValue方法。將它們添加到類中:
private void SetValue(string complexValue, float value) { int columnIndex = Matrix1.Data.Columns.Find(complexValue.Split(';')); Matrix1.Data.SetValue(columnIndex, rowIndex, value); } private float GetValue(string complexValue) { int columnIndex = Matrix1.Data.Columns.Find(complexValue.Split(';')); return new Variant(Matrix1.Data.GetValue(columnIndex, rowIndex, 0)); }
從標(biāo)題中可以清楚地看出,一種方法是獲取單元格的值,第二種方法是更改??。 運(yùn)行報(bào)表:
所以我們計(jì)算了每行數(shù)據(jù)的總數(shù)。