1. CalculatedField中常見表達式:
A. For percent: [ValA]* 100 / ([ValA]+[ ValB]);
PS. Please remreber to set the file type for the CalculatedField to Float
B. Using the Aggregate Expression with grouped data:
[][[^.ColumnName] == [ColumnName] AND [VisitStatus] != 'CANCELLED'].Count()
PS. ColumnName means the fields used in GroupUnion.
C. Summary data with Iif function:
[CategoryPrice] + Iif([DataDetails].Count() > 0, [DataDetails].Sum([Total]), 0)
2. 常見的格式化字符串:
A. Format String A: {0:0.00}
Usage: 5->5.00, 5.9 -> 5.90
B. Format String B: {0:0.00;(0.00);(0.00)}
Usage: -18 -> (18.00) 0.00 -> (0.00) -1.25 -> (1.25)
3. 實現如下圖所示的合並單元格,僅需設置屬性:ProcessDuplicateMode: Merge
4. DataSource/BindingSouce:(Think about the difference between Report DataSource and BindingSouce?)
主要是要多思考一下在動態賦值的過程中,賦值給DataSource和BindingSouce的區別,如何才能讓程序的操作更加方便,而又易於實現我們的要求;
5. 關於CalculatedField數據類型的設置:
在完成了許多DevExpress報表開發后,慢慢地發現了CalculatedField數據類型的重要性。特別是如果在使用到兩個值相乘的情況時,如:Price*Qty,在一般情況下,Price為decimal類型而Qty為int,如果在使用CalculatedField對這兩個字段相乘而不選擇FileType為double的話,最終的結果往往會顯示為空!
6. 如何動態改變主/子報表間傳遞的參數(此處主要是在SubReport控件的BeforePrint事件中進行設置):
private void XXX_SubRpt_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
((XRSubreport)sender).ReportSource.Parameters["SumAmount"].Value = MyValue;
}
7. 關於多層嵌套(多個DetailReport的GroupBy嵌套)時計算合計:
其一就是使用普通的CalculatedField計算每一層的值,然后由內及外進行逐一的相加,盡量不要進行跨層的相加操作,可能會出現計算結果為NULL的情況;其二是在使用CalculatedField時,一定要設置正確的FieldType(如下圖中的Price為Decimal類型,則也需要設置使用到該Price相關的CalculatedField的FieldType),否則結果也有可能為NULL。具體使用如下圖所示:
8. 關於FormattingRules和CalculatedField的區別:
CalculatedField:主要提供對五種不同類型的數據進行操作,主要包括:Aggregate,Math,Date-Time,string,logical。
對於數據,可以進行加減乘除等各種運算;對於字符串,可以進行拼接,截取,大小寫轉化等等的操作;對於日期類型,可以進行日期的格式轉換,判斷等的一系列操作;
除此之外,還提供聚合函數功能。由於可以對多個數據類型進行操作,所以返回值的類型也是多種多樣的,可以是值類型,字符串,還可以是Boolean類型;
FormattingRules:主要是針對某個Band進行操作。例如可以通過設置某個條件,來設置某個Band的顯示與隱藏。因為涉及到對條件的判斷,所以FormattingRules只能返回Boolean類型,如下圖所示:
總結:DevExpress是一個非常優秀的報表開發工具,其Support也非常的敬業和耐心。對於每一次的提問,DevExpress Support都能用最專業的態度給我最優的解決方案,讓我每一次的提問都有所收獲。當所有的收獲不斷累積,我也將不斷超越自己,也成就了自己在DevExpress方面所付出的每一份努力!