• <menu id="w2i4a"></menu>
  • logo FastReport.Net教程2019

    文檔首頁>>FastReport.Net教程2019>>FastReport教程:如何使列突出顯示,具體取決于列的值

    FastReport教程:如何使列突出顯示,具體取決于列的值


    下載FastReport.Net最新版本

    Matrix報表是分析數(shù)據(jù)的絕佳工具。實質(zhì)上,分析報表中的矩陣是一個匯總表。“條件分配”通常用于促進分析。這是FastReport.Net中的常規(guī)工具。條件突出顯示意味著使用顏色,字體或圖標(biāo)突出顯示數(shù)據(jù)單元格,具體取決于給定條件。但是,條件突出顯示適用于個人但是如果我們想根據(jù)標(biāo)題中的值選擇整個列呢?例如,要突出顯示周末。在這種情況下,您將不得不訴諸報表的“無所不能”腳本,常規(guī)顏色突出顯示在這里沒有幫助。

    使用基于nwind.xml演示數(shù)據(jù)庫中的MatrixDemo表的矩陣創(chuàng)建模板:

    FastReport

    我們的想法是在標(biāo)題中找到滿足條件的值。在這個矩陣中,我們按年度計算員工的收入。

    讓我們突出顯示標(biāo)題為2012和2014的列。要執(zhí)行此操作,我們需要突出顯示此列中的標(biāo)題以及所有后續(xù)單元格,包括總計。為矩陣創(chuàng)建BeforePrint事件:

    // List of selected columns
     private List<int> markedColumns;
    // Counter for columns in the first row
     private int firstLineColumn;
     // Counter for columns in the following lines
     private int secondLineColumn;
     
     
    // Matrix event handler
     private void Matrix2_BeforePrint(object sender, EventArgs e)
     {
    // Create a new list for selected columns
     markedColumns = new List<int>();
    // Reset the first row counter
     firstLineColumn = 0;
    // Reset the next row count
     secondLineColumn = 0;
     }

    最初,我們添加了幾個我們將在事件處理程序中使用的變量。這些變量存儲行的標(biāo)記列。此外,在顯示矩陣之前,我們初始化變量。

    為值為[Year]的單元格的BeforePrint事件創(chuàng)建另一個處理程序:

     // Event handler for cells in the first row of the matrix
     private void Cell18_BeforePrint(object sender, EventArgs e)
     {
     // Use sender as TableCell
     TableCell cell = sender as TableCell;
     // Check the required value in the cell
     if (cell.Text == "2012" || cell.Text == "2014") 
     {
     // Sets the fill color for this cell.
     cell.FillColor = Color.Brown;
     // Save to selected list of columns
     markedColumns.Add(firstLineColumn);
     }
     // Increase column count for first row
     firstLineColumn++;
     }

    在這里,我需要做一個小的評論,以便你了解正在發(fā)生的事情的本質(zhì)。關(guān)鍵是在FastReport中構(gòu)建報表時的矩陣輸出是逐行完成的。因此,我們保存矩陣第一行的列號。在我們的例子中,2個值將落入標(biāo)記列的列表中。

    現(xiàn)在為值為[Revenue]的單元格添加事件處理程序:

    // The event handler for the cells in the following rows of the matrix. You need to set it for the second row and the totals.
     private void Cell21_BeforePrint(object sender, EventArgs e)
     {
     // Use sender as TableCell
     TableCell cell = sender as TableCell;
     // Find the current index in the markedColumns list
     if (markedColumns.IndexOf(secondLineColumn) != -1)
     {
     // Sets the fill color for this cell.
     cell.FillColor = Color.Red;
     }
     // Increase counter
     secondLineColumn++;
     // Reset counter for next row
     if (secondLineColumn >= firstLineColumn)
     secondLineColumn = 0;

    在此處理程序中,我們找到與第一行中所選列對應(yīng)的列,并將其單元格繪制為紅色。到達最后一列后,重置下一行的變量。如您所知,在構(gòu)建報表時,矩陣的第二行是動態(tài)的。這意味著它將顯示在源中的每行數(shù)據(jù)。因此,我們需要檢查每一行并為正確列中的單元格著色。

    腳本中給出的解決方案是不尋常的,但對于這種情況唯一可能的解決方案,因為矩陣是動態(tài)構(gòu)建的,并且不存儲單元格的最終結(jié)構(gòu),坐標(biāo)和位置,直到它直接在工作表上繪制。只有模板(我們在設(shè)計器中看到的模板)和矩陣標(biāo)題的文本值存儲在內(nèi)存中。

    因此,我們必須遍歷所有行并記住列以進行著色。

    根據(jù)腳本,我們必須為矩陣創(chuàng)建三個事件處理程序BeforePrint,單元格[Year]和單元格[Revenue]。但是,在我們的矩陣中還有另一個第三行。它顯示結(jié)果,根據(jù)所選列繪制它們也是很好的。為此,對于位于[Revenue]下的單元格,只需從同一[Revenue]掛鉤BeforeFrint事件處理程序:

    FastReport

    現(xiàn)在,運行報表:

    FastReport

    如果要以不同的顏色繪制總計,則必須為總計的單元格創(chuàng)建自己的BeforePrint事件處理程序,類似于[Revenue]單元格的處理程序。

    購買FastReport.Net正版授權(quán),請點擊“咨詢在線客服”喲!

    Stimulsoft新年促銷
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    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); })();