我们的想法是在标题中找到满足条件的值。在这个矩阵中,我们按年度计算员工的收入。 让我们突出显示标题为2012和2014的列。要执行此操作,我们需要突出显示此列中的标题以及所有后续单元格,包括总计。为矩阵创建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;
}
最初,我们添加了几个我们将在事件处理程序中使用的变量。这些变量存储行的标记列。此外,在显示矩阵之前,我们初始化变量。
为值为[Year]的单元格的BeforePrint事件创建另一个处理程序:
// 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++;
}
在这里,我需要做一个小的评论,以便你了解正在发生的事情的本质。关键是在FastReport中构建报表时的矩阵输出是逐行完成的。因此,我们保存矩阵第一行的列号。在我们的例子中,2个值将落入标记列的列表中。
现在为值为[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;
在此处理程序中,我们找到与第一行中所选列对应的列,并将其单元格绘制为红色。到达最后一列后,重置下一行的变量。如您所知,在构建报表时,矩阵的第二行是动态的。这意味着它将显示在源中的每行数据。因此,我们需要检查每一行并为正确列中的单元格着色。
脚本中给出的解决方案是不寻常的,但对于这种情况唯一可能的解决方案,因为矩阵是动态构建的,并且不存储单元格的最终结构,坐标和位置,直到它直接在工作表上绘制。只有模板(我们在设计器中看到的模板)和矩阵标题的文本值存储在内存中。
因此,我们必须遍历所有行并记住列以进行着色。
根据脚本,我们必须为矩阵创建三个事件处理程序BeforePrint,单元格[Year]和单元格[Revenue]。但是,在我们的矩阵中还有另一个第三行。它显示结果,根据所选列绘制它们也是很好的。为此,对于位于[Revenue]下的单元格,只需从同一[Revenue]挂钩BeforeFrint事件处理程序:
现在,运行报表:
如果要以不同的颜色绘制总计,则必须为总计的单元格创建自己的BeforePrint事件处理程序,类似于[Revenue]单元格的处理程序。 购买FastReport.Net正版授权,请点击“咨询在线客服”哟!
本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:FastReport控件中文网 [https://www.fastreportcn.com/]
本文地址:https://www.fastreportcn.com/post/2288.html
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:FastReport控件中文网 [https://www.fastreportcn.com/]
本文地址:https://www.fastreportcn.com/post/2288.html

联系电话:023-68661681

返回