XtraReport交叉表隐藏列标题及自定义排序

1.隐藏列标题

用DevExpress PivotGrid report 做报表的时候,将字段拖放到报表中后,ColumnArea和DataArea会显示两个标题字段,如下图:

clip_image001

选中交叉表,设置以下属性可以隐藏:

clip_image002

效果如下:

clip_image003

2.自定义排序

做报表的时候,设定ColumnArea的FiledName为sSize,最终呈现的报表是依据sSize排序。而期望的是按照iSizeGroupId,iSizeOrder排序,但iSizeGroupId,iSizeOrder由于不用在报表中呈现,故未将其拖放在报表中.

如何使ColumnArea依据iSizeGroupId,iSizeOrder来排序呢? 使用xrPivotGrid1_CustomFieldSort 事件可以解决这个问题。

具体处理如下:

1.设置sSize的SortMode为Custom。否则xrPivotGrid1_CustomFieldSort 事件不会触发。

clip_image004

clip_image005

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.保存预览即可达到预期目标

clip_image006

原文地址:https://www.cnblogs.com/wanglj2007/p/5503063.html