1.隱藏列標題
用DevExpress PivotGrid report 做報表的時候,將字段拖放到報表中后,ColumnArea和DataArea會顯示兩個標題字段,如下圖:
選中交叉表,設置以下屬性可以隱藏:
效果如下:
2.自定義排序
做報表的時候,設定ColumnArea的FiledName為sSize,最終呈現的報表是依據sSize排序。而期望的是按照iSizeGroupId,iSizeOrder排序,但iSizeGroupId,iSizeOrder由於不用在報表中呈現,故未將其拖放在報表中.
如何使ColumnArea依據iSizeGroupId,iSizeOrder來排序呢? 使用xrPivotGrid1_CustomFieldSort 事件可以解決這個問題。
具體處理如下:
1.設置sSize的SortMode為Custom。否則xrPivotGrid1_CustomFieldSort 事件不會觸發。
2.處理xrPivotGrid1_CustomFieldSort 事件。
注:此處的排序字段也可以在SQL中提前處理好,在SQL中將兩個字段合並一個排序字段。
private void pivotGrid1_CustomFieldSort(object sender, HuanSi.XtraReports.UI.PivotGrid.PivotGridCustomFieldSortEventArgs e)
{
//當列為sSize時,才處理自定義排序
if (e.Field.FieldName == "sSize")
{
if (e.Value1 == null || e.Value2 == null) return;
e.Handled = true;
//取iSizeGroupId
string sg1 = e.GetListSourceColumnValue(e.ListSourceRowIndex1, "iSizeGroupId").ToString();
string sg2 = e.GetListSourceColumnValue(e.ListSourceRowIndex2, "iSizeGroupId").ToString();
//取iSizeOrder
string s1 = e.GetListSourceColumnValue(e.ListSourceRowIndex1, "iSizeOrder").ToString();
string s2 = e.GetListSourceColumnValue(e.ListSourceRowIndex2, "iSizeOrder").ToString();
//比較iSizeGroupId
if (string.Compare(sg1, sg2) > 0)
{
e.Result = 1;
}
else if (string.Compare(sg1, sg2) == 0) //iSizeGroupId相等時,再比較iSizeOrder
{
e.Result = string.Compare(s1, s2);
}
else
{
e.Result = -1;
}
}
}
3.保存預覽即可達到預期目標