Devexpress ASPxPivotGrid 点击装置列排序

Devexpress ASPxPivotGrid 点击装置列排序Devexpress ASPxPivotGrid 点击装置列排序View Code
protected void Page_Load(object sender, EventArgs e) { ASPxPivotGrid1.FieldValueTemplate = new FieldValueTemplate(ASPxPivotGrid1);
}
protected void ASPxPivotGrid1_CustomCallback(object sender, PivotGridCustomCallbackEventArgs e) { string[] args = e.Parameters.Split('|'); if (args[0] == "SC") DevCommon.HandleSortByColumnClick((ASPxPivotGrid)sender, args);
}
#region Dev ASPxPivotGrid转置列排序 #region 点击转置列排序 /// /// 点击转置列排序 /// ///
///
public static void HandleSortByColumnClick(ASPxPivotGrid pivotGrid, string[] args) { int fieldIndex = int.Parse(args[1]), visibleIndex = int.Parse(args[3]), dataIndex = int.Parse(args[4]); bool isColumn = bool.Parse(args[2]); PivotArea area = GetArea(isColumn), crossArea = GetCrossArea(isColumn); DevExpress.Web.ASPxPivotGrid.PivotGridField dataField; List fields; List values; GetFieldsAndValues(pivotGrid, fieldIndex, visibleIndex, dataIndex, area,out dataField, out fields, out values); SetSortByColumn(pivotGrid, crossArea, dataField, fields, values); } #endregion #region 设置字段排序 /// /// 设置字段排序 /// ///
///
///
///
///
public static void SetSortByColumn(ASPxPivotGrid pivotGrid, PivotArea crossArea, DevExpress.Web.ASPxPivotGrid.PivotGridField dataField, List fields, List values) { pivotGrid.BeginUpdate(); List crossFields = pivotGrid.GetFieldsByArea(crossArea); for (int i = 0; i < crossFields.Count; i++) { crossFields[i].SortBySummaryInfo.Field = dataField; if (crossFields[i].SortOrder == PivotSortOrder.Descending) { crossFields[i].SortOrder = PivotSortOrder.Ascending; } else if (crossFields[i].SortOrder == PivotSortOrder.Ascending) { crossFields[i].SortOrder = PivotSortOrder.Descending; } crossFields[i].SortBySummaryInfo.Conditions.Clear(); for (int j = 0; j < values.Count; j++) { crossFields[i].SortBySummaryInfo.Conditions.Add( new PivotGridFieldSortCondition(fields[j], values[j])); } } pivotGrid.EndUpdate(); } #endregion #region 获取排序字段值 /// /// 获取排序字段值 /// ///
///
///
///
///
///
///
///
public static void GetFieldsAndValues(ASPxPivotGrid pivotGrid, int fieldIndex, int visibleIndex, int dataIndex, PivotArea area,out DevExpress.Web.ASPxPivotGrid.PivotGridField dataField, out List fields, out List values) { dataField = pivotGrid.GetFieldByArea(PivotArea.DataArea, dataIndex); fields = pivotGrid.GetFieldsByArea(area); values = new List(fields.Count); for (int i = 0; i < fields.Count; i++) { object value = pivotGrid.GetFieldValueByIndex(fields[i], visibleIndex); values.Add(value); if (fields[i].Index == fieldIndex) break; } } #endregion #region 获取转置行 public static PivotArea GetCrossArea(bool isColumn) { return isColumn ? PivotArea.RowArea : PivotArea.ColumnArea; } #endregion #region 获取转置列 public static PivotArea GetArea(bool isColumn) { return isColumn ? PivotArea.ColumnArea : PivotArea.RowArea; } #endregion #endregion #region Dev ASPxPivotGrid转换列排序模板 public class FieldValueTemplate : ITemplate { public FieldValueTemplate(ASPxPivotGrid pivotGrid) { this.pivotGrid = pivotGrid; } ASPxPivotGrid pivotGrid; protected ASPxPivotGrid PivotGrid { get { return pivotGrid; } } #region ITemplate Members public void InstantiateIn(Control container) { PivotGridFieldValueTemplateContainer c = (PivotGridFieldValueTemplateContainer)container; HyperLink link = new HyperLink(); link.Text = (string)c.Text; link.NavigateUrl = "javascript:void(0)"; link.Attributes["onclick"] = GetOnClickHandler(c); c.Controls.Add(link); bool isSortedByColumn = GetIsSortedByColumn(c); if (isSortedByColumn) { c.Controls.Add(new LiteralControl("&nbsp;*")); } } bool GetIsSortedByColumn(PivotGridFieldValueTemplateContainer c) { List sortedFields = PivotGrid.Data.VisualItems.GetSortedBySummaryFields(c.ValueItem.IsColumn, c.ValueItem.Index); bool isSortedByColumn = sortedFields != null && sortedFields.Count > 0; return isSortedByColumn; } string GetOnClickHandler(PivotGridFieldValueTemplateContainer c) { StringBuilder res = new StringBuilder(); res.Append(pivotGrid.ClientInstanceName).Append(".PerformCallback('SC|"); res.Append(GetFieldIndex(c)).Append("|") .Append(c.ValueItem.IsColumn).Append("|") .Append(c.ValueItem.VisibleIndex).Append("|") .Append(c.ValueItem.DataIndex); res.Append("');"); return res.ToString(); } int GetFieldIndex(PivotGridFieldValueTemplateContainer c) { return c.ValueItem.Field != null ? c.ValueItem.Field.Index : -1; } #endregion } #endregion
注意:一定要添加ASPxPivotGrid的ClientInstanceName,和ID一样就可以了..不然点击无效----我死在这个上很久..
研究Dev有一段时间了,一直没时间来发表文章....以后会陆续跟上...
Tags: 

延伸阅读

最新评论

发表评论