如何在矩陣FastReport.Net中創建自己的總計

下載FastReport.Net最新版本download

FastReport.Netdownload中的Matrix對象執行用於顯示彙總表的典型任務。但是,當任務不標準時,只有報表腳本會幫助我們。在腳本本身中,您幾乎可以實現任何要求。 如您所知,矩陣具有內置函數,可按字段和列顯示總計。通常,彙總表中的總數是金額。如果您想要一個具有您自己的計算公式的總計,該怎麼辦 如果您想有選擇地顯示某些列的總計? 要完成所有這些操作,您需要禁用標準總計並創建自己的列,其中將計算總計。但是,如果您仍然使用標準總計,則需要使用AfterTotals矩陣事件使其值也出現在用戶總計中。它將在構建具有所有標準結果的矩陣之後發生,以便所有數據都可供我們使用。此事件不允許您向矩陣添加和修改數據,即使用AddValue和SetValue方法。

那麼,讓我們來看一個例子。 使用簡單模板創建矩陣:

如何在矩陣FastReport.Net中創建自己的總計

要在矩陣中創建維度或指標,您需要將表達式插入相應的單元格中。因爲我們從代碼填充矩陣,所以我們需要虛擬表達式來創建結構。爲此,請從單元格的“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);
}
}
在這裏,我們得到矩陣行的索引數組。然後,我們循環遍歷這些行索引。對於每一行,我們得到一個列索引數組。在列索引的循環中,我們生成了增加的量。最後,我們將收到的金額分配給“二月;總計”單元格。 現在,運行報表:

如何在矩陣FastReport.Net中創建自己的總計

正如預期的那樣,結果是2月組的輸出。並且還處理來自“員工”總數的金額。 通過這種方式,我們可以爲所需的列和行創建自己的總計。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章