如何使用XtraReport格式规则有条件地更改属性?

时间:2014-04-01 16:56:01

标签: devexpress reporting xtrareport

我需要根据里面的值更改xrTableCell的背景颜色。

比如说,如果值为"已批准",则单元格将为绿色背景,红色表示"已拒登"黄色表示"待处理"。

在Access数据库或SQL报告(SSRS)中,我们可以在=IIF(...)属性中输入=someFunction()BackColor。但是在XtraReport这里,它并不允许我。

至于格式规则表,我们是否可以在[this] == 'Approved'内写出类似Condition的内容?

2 个答案:

答案 0 :(得分:1)

重点是以编程方式添加格式规则。

就我而言,有10个部分,每个部分的状态值为"已批准" "待定" "拒登" "未开始"。

如果可以在样式设置中使用IIF语句,我愿意手动完成。但是在DevExpress XtraReport中,没有办法做到这一点。如果规则只能写为[条件:已批准,则样式:该单元格中的绿色背景],则每个部分将添加四个规则,这使得总共有40个规则!没有人愿意手工做。

好的,这是我的解决方案。

转到报告的代码隐藏,在InitializeComponent();之后我们可以添加代码来操作报告。这是我的方法AddColorCodingFormattingRules(sections, statusColors);

    private void AddColorCodingFormattingRules(IEnumerable sections, Dictionary<string, Color> statusColors)
    {
        foreach (var s in sections)
        {
            var cellName = string.Format("xrTableCell{0}", s);
            var cell = FindControl(cellName, false) as XRTableCell;
            if (cell == null) continue;
            foreach (var pair in statusColors)
            {
                var rule = new FormattingRule
                {
                    Condition = string.Format("[{1}] == \'{0}\'", pair.Key, s),
                    Name = string.Format("_formatStatus{1}{0}", pair.Key, s)
                };
                rule.Formatting.BackColor = pair.Value;

                FormattingRuleSheet.Add(rule);
                cell.FormattingRules.Add(rule);
            }
        }
    }

希望解决方案可以在将来帮助有需要的人。希望XtraReport可以在未来的版本中进行改进,这样我们就不需要具备这种创造力。

答案 1 :(得分:0)

您可以转到属性网格并选择格式规则,在报表设计器中添加格式规则;要添加条件,您需要选择一个字段然后创建条件,例如,如果值出现在名为Status的列中,则需要创建三个格式规则(每种颜色一个)并使条件如下: / p>

[Status] =='Aprroved'

然后,选择表格的单元格并再次打开Fomratting Rules Editor并在“应用规则”下“移动”您选择的格式规则,以便格式化规则对您想要的控件生效。