XtraReport交叉表隐藏列标题及自定义排序
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.保存预览即可达到预期目标