2014-04-01 40 views
1

我需要根據裏面的值更改xrTableCell的背面顏色。如果值爲「已批准」,則單元格將處於綠色背景,紅色表示「已拒絕」,黃色表示「待處理」。如何使用XtraReport格式規則有條件地更改屬性?

在Access數據庫或SQL報表(SSRS)中,我們可以在BackColor屬性中輸入=IIF(...)=someFunction()。但是在XtraReport中,它不允許我。

至於格式化規則表,是否可以在Condition內寫入類似[this] == 'Approved'的東西?

回答

1

整個問題是要編程添加格式化規則。

在我的情況下,有10個部分,其中每個部分的狀態值爲「Approved」,「Pending」,「Disapproved」,「Not Started」。

如果有,可以在樣式設置中使用的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在未來的版本中可以有所改進,這樣我們就不需要那些創意。

0

您可以通過轉到屬性網格並選擇格式設置規則在報表設計器中添加格式設置規則;爲了添加條件,您需要選擇一個字段,然後創建條件,例如,如果該值出現在名爲Status的列中,則需要創建三條格式規則(每個顏色一個)並使條件如下所示:

[狀態] ==「Aprroved」

然後,選擇表格的單元格,再而三「招」,你選擇正確的格式規則,根據規則應用打開Fomratting規則編輯器,所以格式化規則在您想要的控件上生效。

相關問題