• <menu id="w2i4a"></menu>
  • logo Fastreport.Net 教程2018(完結(jié))

    文檔首頁>>Fastreport.Net 教程2018(完結(jié))>>如何在矩陣FastReport.Net中創(chuàng)建自己的總計(jì)

    如何在矩陣FastReport.Net中創(chuàng)建自己的總計(jì)


    下載FastReport.Net最新版本

    FastReport.Net中的Matrix對(duì)象執(zhí)行用于顯示匯總表的典型任務(wù)。但是,當(dāng)任務(wù)不標(biāo)準(zhǔn)時(shí),只有報(bào)表腳本會(huì)幫助我們。在腳本本身中,您幾乎可以實(shí)現(xiàn)任何要求。 如您所知,矩陣具有內(nèi)置函數(shù),可按字段和列顯示總計(jì)。通常,匯總表中的總數(shù)是金額。如果您想要一個(gè)具有您自己的計(jì)算公式的總計(jì),該怎么辦 如果您想有選擇地顯示某些列的總計(jì)? 要完成所有這些操作,您需要禁用標(biāo)準(zhǔn)總計(jì)并創(chuàng)建自己的列,其中將計(jì)算總計(jì)。但是,如果您仍然使用標(biāo)準(zhǔn)總計(jì),則需要使用AfterTotals矩陣事件使其值也出現(xiàn)在用戶總計(jì)中。它將在構(gòu)建具有所有標(biāo)準(zhǔn)結(jié)果的矩陣之后發(fā)生,以便所有數(shù)據(jù)都可供我們使用。此事件不允許您向矩陣添加和修改數(shù)據(jù),即使用AddValue和SetValue方法。

    那么,讓我們來看一個(gè)例子。 使用簡單模板創(chuàng)建矩陣:

    FastReport

    要在矩陣中創(chuàng)建維度或指標(biāo),您需要將表達(dá)式插入相應(yīng)的單元格中。因?yàn)槲覀儚拇a填充矩陣,所以我們需要虛擬表達(dá)式來創(chuàng)建結(jié)構(gòu)。為此,請(qǐng)從單元格的“Data”面板中放置任何表達(dá)式,并使用表達(dá)式編輯器清除表達(dá)式的文本。 為矩陣創(chuàng)建AfterData事件處理程序。在其中,我們將添加數(shù)據(jù):

    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});}

    在這里,我們?yōu)榫仃囍械拿總€(gè)單元格添加值。在我們的例子中,這些是兩行數(shù)據(jù)。請(qǐng)注意,我們?cè)?月份僅添加了一項(xiàng)。雖然它的值為零,但很快我們將在AfterTotals事件中計(jì)算它。 接下來,我們需要一種獲取單元格值的方法:

     private float GetValue(int columnIndex)
     {
     object value = Matrix1.Data.GetValue(columnIndex, rowIndex, 0);
     return new Variant(value);
     }

    這很簡單 - 我們傳遞列索引,然后得到值。 我們還需要一個(gè)類變量 - rowIndex: private int rowIndex; 現(xiàn)在讓我們添加一個(gè)為單元格賦值的方法:

    private void SetValue(string complexValue, float value)
     {
     int columnIndex = Matrix1.Data.Columns.Find(complexValue.Split(';'));
     Matrix1.Data.SetValue(columnIndex, rowIndex, value);
     }

    現(xiàn)在,讓我們繼續(xù)計(jì)算結(jié)果。為矩陣添加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);
     }
     }

    在這里,我們得到矩陣行的索引數(shù)組。然后,我們循環(huán)遍歷這些行索引。對(duì)于每一行,我們得到一個(gè)列索引數(shù)組。在列索引的循環(huán)中,我們生成了增加的量。最后,我們將收到的金額分配給“二月;總計(jì)”單元格。 現(xiàn)在,運(yùn)行報(bào)表:

    FastReport

    正如預(yù)期的那樣,結(jié)果是2月組的輸出。并且還處理來自“員工”總數(shù)的金額。 通過這種方式,我們可以為所需的列和行創(chuàng)建自己的總計(jì)。

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();