翻譯|使用教程|編輯:王香|2018-10-29 09:34:04.000|閱讀 412 次
概述:使用FastReport.Net中的Matrix對象中來創建自己的總計。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
FastReport.Net中的Matrix對象執行用于顯示匯總表的典型任務。但是,當任務不標準時,只有報表腳本會幫助我們。在腳本本身中,您幾乎可以實現任何要求。 如您所知,矩陣具有內置函數,可按字段和列顯示總計。通常,匯總表中的總數是金額。如果您想要一個具有您自己的計算公式的總計,該怎么辦 如果您想有選擇地顯示某些列的總計? 要完成所有這些操作,您需要禁用標準總計并創建自己的列,其中將計算總計。但是,如果您仍然使用標準總計,則需要使用AfterTotals矩陣事件使其值也出現在用戶總計中。它將在構建具有所有標準結果的矩陣之后發生,以便所有數據都可供我們使用。此事件不允許您向矩陣添加和修改數據,即使用AddValue和SetValue方法。
那么,讓我們來看一個例子。 使用簡單模板創建矩陣:
要在矩陣中創建維度或指標,您需要將表達式插入相應的單元格中。因為我們從代碼填充矩陣,所以我們需要虛擬表達式來創建結構。為此,請從單元格的“Data”面板中放置任何表達式,并使用表達式編輯器清除表達式的文本。 為矩陣創建AfterData事件處理程序。在其中,我們將添加數據:
private void Matrix1_AfterData(object sender, EventArgs e) { Matrix1.AddValue(new Object[] { "January", "Salary" }, new Object[] { "1" }, new Object[] { 1000}); Matrix1.AddValue(new Object[] { "January", "Bonus" }, new Object[] { "1" }, new Object[] { 500}); Matrix1.AddValue(new Object[] { "January", "Penalty" }, new Object[] { "1" }, new Object[] { 200}); Matrix1.AddValue(new Object[] { "February", "Salary" }, new Object[] { "1" }, new Object[] { 1000}); Matrix1.AddValue(new Object[] { "February", "Bonus" }, new Object[] { "1" }, new Object[] { 500}); Matrix1.AddValue(new Object[] { "February", "Penalty" }, new Object[] { "1" }, new Object[] { 200}); Matrix1.AddValue(new Object[] { "February", "Total" }, new Object[] { "1" }, new Object[] { 0}); Matrix1.AddValue(new Object[] { "January", "Salary" }, new Object[] { "2" }, new Object[] { 500}); Matrix1.AddValue(new Object[] { "January", "Bonus" }, new Object[] { "2" }, new Object[] { 300}); Matrix1.AddValue(new Object[] { "January", "Penalty" }, new Object[] { "2" }, new Object[] { 250}); Matrix1.AddValue(new Object[] { "February", "Salary" }, new Object[] { "2" }, new Object[] { 500}); Matrix1.AddValue(new Object[] { "February", "Bonus" }, new Object[] { "2" }, new Object[] { 300}); Matrix1.AddValue(new Object[] { "February", "Penalty" }, new Object[] { "2" }, new Object[] { 250}); Matrix1.AddValue(new Object[] { "February", "Total" }, new Object[] { "2" }, new Object[] { 0});}
在這里,我們為矩陣中的每個單元格添加值。在我們的例子中,這些是兩行數據。請注意,我們在2月份僅添加了一項。雖然它的值為零,但很快我們將在AfterTotals事件中計算它。 接下來,我們需要一種獲取單元格值的方法:
private float GetValue(int columnIndex) { object value = Matrix1.Data.GetValue(columnIndex, rowIndex, 0); return new Variant(value); }
這很簡單 - 我們傳遞列索引,然后得到值。 我們還需要一個類變量 - rowIndex: private int rowIndex; 現在讓我們添加一個為單元格賦值的方法:
private void SetValue(string complexValue, float value) { int columnIndex = Matrix1.Data.Columns.Find(complexValue.Split(';')); Matrix1.Data.SetValue(columnIndex, rowIndex, value); }
現在,讓我們繼續計算結果。為矩陣添加AfterTotals事件處理程序:
private void Matrix1_AfterTotals(object sender, EventArgs e) { int[] rowIndices = Matrix1.Data.Rows.GetTerminalIndices(); for (int i = 0; i < rowIndices.Length; i++) { rowIndex = rowIndices[i]; int[] columnIndices = Matrix1.Data.Columns.GetTerminalIndices(new Object[] { "February" }); float oplataSum = 0; foreach (int columnIndex in columnIndices) { oplataSum += GetValue(columnIndex); } SetValue("February;Total", oplataSum); } }
在這里,我們得到矩陣行的索引數組。然后,我們循環遍歷這些行索引。對于每一行,我們得到一個列索引數組。在列索引的循環中,我們生成了增加的量。最后,我們將收到的金額分配給“二月;總計”單元格。 現在,運行報表:
正如預期的那樣,結果是2月組的輸出。并且還處理來自“員工”總數的金額。 通過這種方式,我們可以為所需的列和行創建自己的總計。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn