`
luhantu
  • 浏览: 203468 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

datagrid自动排序 (Sorting DataGrid programmatically)

    博客分类:
  • Flex
阅读更多

项目中很多时候会遇datagrid排序的问题,譬如翻页的datagrid,在第一页做了多行排序(multiColumnSort),翻页后的数据也要做这样的排序,怎么办呢?

1.首先找到每个column的排列顺序和sort方向。

2.把所有column按照顺序(升序)和sort方向组装到一个Array中。

3.生成一个sort对象,其datefields 就是这个数组。

4.重新赋Datagrid的数据源,并把原来的sort对象(第三步生成的)赋给此数据源。

5.大功告成!

 

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%">
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.collections.ICollectionView;
			import mx.controls.Label;
			import mx.controls.advancedDataGridClasses.AdvancedDataGridHeaderRenderer;
			import mx.controls.advancedDataGridClasses.AdvancedDataGridItemRenderer;
			import mx.controls.advancedDataGridClasses.SortInfo;
			import mx.core.FlexGlobals;
			import mx.core.UITextField;
			import mx.core.UITextFormat;
			import mx.core.mx_internal;
			import mx.events.AdvancedDataGridEvent;
			
			import spark.collections.Sort;
			import spark.collections.SortField;
			
			[Bindable]
			private var dpFlatOne:ArrayCollection = new ArrayCollection([
				{Region:"Southwest1", Territory:"Arizona1",Territory_Rep:"BTerritory_Rep1", Actual:3, Estimate:40000}, 
				{Region:"Southwest2", Territory:"Arizona2",Territory_Rep:"Territory_Rep2", Actual:29885, Estimate:30000},  
				{Region:"Southwest3", Territory:"Central3",Territory_Rep:"Territory_Rep3", Actual:29134, Estimate:30000},  
				{Region:"Southwest4", Territory:"Nevada4",Territory_Rep:"Territory_Rep4", Actual:1, Estimate:45000},  
				{Region:"Southwest5", Territory:"Northern5",Territory_Rep:"Territory_Rep5", Actual:38805, Estimate:40000}, 
				{Region:"Southwest6", Territory:"Northern6",Territory_Rep:"Territory_Rep6", Actual:55498, Estimate:40000},  
				{Region:"Southwest7", Territory:"Southern7",Territory_Rep:"Territory_Rep7", Actual:44985, Estimate:45000}, 
				{Region:"Southwest8", Territory:"Southern8",Territory_Rep:"Territory_Rep8", Actual:1, Estimate:45000}
			]);
			private var dpFlatTwo:ArrayCollection = new ArrayCollection([
				{Region:"Southwest9", Territory:"Arizona9",Territory_Rep:"Territory_Rep9", Actual:138865, Estimate:40000}, 
				{Region:"Southwest10", Territory:"Arizona10",Territory_Rep:"Territory_Rep10", Actual:229885, Estimate:30000},  
				{Region:"Southwest11", Territory:"Central11",Territory_Rep:"Territory_Rep11", Actual:329134, Estimate:30000},  
				{Region:"Southwest12", Territory:"Nevada12",Territory_Rep:"Territory_Rep12", Actual:452888, Estimate:45000},  
				{Region:"Southwest13", Territory:"Northern13",Territory_Rep:"Territory_Rep13", Actual:538805, Estimate:40000}, 
				{Region:"Southwest14", Territory:"Northern14",Territory_Rep:"Territory_Rep14", Actual:655498, Estimate:40000},  
				{Region:"Southwest15", Territory:"Southern15",Territory_Rep:"Territory_Rep15", Actual:744985, Estimate:45000}, 
				{Region:"Southwest16", Territory:"Southern16",Territory_Rep:"Territory_Rep16", Actual:855555, Estimate:45000}
			]);
			private var sortCount:int = 0;
			protected function programmingSortclickHandler(event:MouseEvent):void
			{
				var sortFiledsArray:ArrayCollection = new ArrayCollection();
				for each(var column:AdvancedDataGridColumn in firstDatagrid.columns)
				{
					var sortInfo:SortInfo = firstDatagrid.getFieldSortInfo(column);
					if (sortInfo != null)
					{
						sortFiledsArray.addItem({sortFiled:new SortField(column.dataField,column.sortDescending),index:sortInfo.sequenceNumber});
					}
				}
				var sort1:Sort = new Sort();
				sort1.fields = [new SortField("index",false,true)];
				sortFiledsArray.sort = sort1;
				sortFiledsArray.refresh();
				
				var sortFields:Array = new Array();
				for each(var sortObj:Object in sortFiledsArray)
				{
					sortFields.push(sortObj.sortFiled);
				}
				var sort:Sort = new Sort();
				sort.fields = sortFields;
				if(sortCount % 2 == 0)
				{
					firstDatagrid.dataProvider = dpFlatTwo;
				}
				else
				{
					firstDatagrid.dataProvider = dpFlatOne;
				}
				(firstDatagrid.dataProvider as ICollectionView).sort = sort;
				sortCount++;
			}
		]]>
	</fx:Script>
	<s:layout>
		<s:VerticalLayout/>
	</s:layout>
	<mx:AdvancedDataGrid id="firstDatagrid"
						 sortableColumns="true"
						 sortExpertMode="true"
						 width="600" height="100%" 
						 dataProvider="{dpFlatOne}">        
		<mx:columns>
			<mx:AdvancedDataGridColumn dataField="Region" itemRenderer="mx.controls.Label"/>
			<mx:AdvancedDataGridColumn dataField="Territory"/>
			<mx:AdvancedDataGridColumn dataField="Territory_Rep"
									   showDataTips="true"
									   headerText="Territory_Rep" itemRenderer="mx.controls.Label"/>
			<mx:AdvancedDataGridColumn dataField="Actual" headerText="asdfadsfasdfasafsdf" dataTipField="Actual" showDataTips="true"/>
			<mx:AdvancedDataGridColumn dataField="Estimate" headerText="asdddddddddddddddddddddddf"/>
		</mx:columns>
	</mx:AdvancedDataGrid>
	<s:Button label="Programming Sort" click="programmingSortclickHandler(event)"/>
</s:Group>
 

 

分享到:
评论

相关推荐

    EasyUI Datagrid 中文排序的问题

    ### EasyUI Datagrid 中文排序解决方案 #### 一、前言 在开发Web应用程序时,经常需要处理中文数据的排序问题。特别是在使用如EasyUI Datagrid这样的前端组件时,中文排序成为了开发者面临的一个常见挑战。本文将...

    利用DataGrid显示某目录下的所有文件 | 对DataGrid进行排序

    在设置数据源后,DataGrid会自动创建列来对应`FileInfo`对象的属性,如`Name`(文件名)、`Length`(文件大小)和`CreationTime`(创建时间)等。 要实现对DataGrid的排序功能,我们需要设置每列的`SortMemberPath`...

    dotnet 7 WPF 破坏性改动 按下 F3 让 DataGrid 自动排序.rar

    本文档将详细讲解其中一个显著的改动:按下F3键自动触发DataGrid排序功能的改变,并提供应对策略。 **F3按键行为的改变** 在.NET Framework及之前的版本中,WPF的DataGrid控件并未对F3键有特定的行为定义。然而,...

    juqery easyui datagrid的排序

    juqery easyui datagrid的排序,当前页面排序。包含数字排序,中文排序,日期排序。

    DataGrid中的排序列怎么设

    默认情况下,`DataGrid`会根据数据源中的字段自动创建列,并允许用户通过点击列头来对数据进行升序或降序排序。 设置`DataGrid`中的排序列,主要涉及以下几个关键步骤: 1. **数据绑定**:确保你的`DataGrid`已经...

    dataGrid中文排序

    本篇文章将深入探讨如何实现`dataGrid`中的中文排序,并结合提供的文件`SortUtil.txt`和`用法.txt`来讲解相关代码和字符集处理。 在Flex中,`dataGrid`的排序通常通过`sortField`和`sortOrder`属性或`sort`方法来...

    easyui datagrid排序图标

    默认情况下,EasyUI DataGrid并不会自动显示排序图标。这意味着当用户首次看到DataGrid时,他们可能不清楚哪些列可以通过点击进行升序或降序排序。为了提升用户体验,我们需要手动添加这些排序图标。 实现这个功能...

    DataGrid自动生成代码

    DataGrid自动生成代码 可以自动生成DataGrid不要控件

    wpf datagrid排序列表头文字右边的升降箭头

    本教程将深入讲解如何实现`DataGrid`的列头排序功能,即点击列表头文字右边的升降箭头进行升序或降序排序。这个功能在数据量较大、需要用户方便地对数据进行查找和分析时非常有用。 首先,`DataGrid`的排序功能主要...

    DataGrid自动增加数据

    当我们谈论“DataGrid自动增加数据”,通常是指在用户交互过程中或程序逻辑控制下,DataGrid能够自动添加新的行或记录到其显示的数据源。这在处理大量数据时非常有用,可以提高用户操作效率和用户体验。下面我们将...

    wpf DataGrid分组、排序、筛选

    本篇文章将详细探讨如何利用`DataGrid`实现数据的分组、排序和筛选功能,以提高用户体验并便于数据管理。 **一、DataGrid数据分组** 数据分组允许用户将类似的数据聚合在一起,形成可视化的层次结构。在`DataGrid`...

    Flex中如何创建自定义排序DataGrid控件的例子

    在Flex开发中,DataGrid控件是用于展示数据集的常用组件,它可以显示表格形式的数据并支持用户交互,如排序、选择和编辑。然而,有时我们可能需要对DataGrid的默认排序功能进行自定义,以满足特定的业务需求。本教程...

    datagrid 多表头 排序 合计

    **排序(Sorting)**: 排序功能使用户能够根据特定的列值对数据进行升序或降序排列。在`datagrid`中,实现排序通常涉及监听用户的点击事件(用户点击列标题时),然后根据选择的列调用排序算法。排序算法可以是内置...

    easyUI datagrid 实现行上移,下移,置顶,置底,排序提交后台绑定键盘事件

    这通常需要一个提交按钮或者在改变顺序后自动触发一个异步请求,将新的排序信息发送给服务器。服务器端接收到请求后,根据传递的信息更新数据表的顺序。 4. **绑定键盘事件**:在JavaScript中,可以使用`...

    绑定adodc的datagrid自动调整列宽

    这是一个VB6.0调整datagrid的模块代码,网上找过很多,都没有VB6的,而且都是两大段的,我这个简单就简单实用了。

    Asp.Net从零开始24(DataGrid的排序)

    ### ASP.NET DataGrid排序功能详解 #### 一、引言 在ASP.NET Web应用程序开发过程中,经常需要处理数据展示及交互。其中,`DataGrid` 控件是非常实用且功能强大的工具之一,它允许用户轻松地对数据库中的数据进行...

    DataGrid 查找排序

    然而,为了自定义排序逻辑,可以使用DataGrid的Sorting事件。在事件处理程序中,可以对数据源进行排序,然后重新绑定: ```csharp dataGrid.Sorting += (sender, e) =&gt; { // 获取排序列和排序方向 string column...

    C# WPF DataGrid行拖拽顺序交换

    3. **处理数据源**:由于WPF的DataGrid是数据绑定的,所以改变数据源的顺序会自动反映到界面上。你需要在Drop事件处理器中重新排序数据源。 4. **设置适当的视觉反馈**:为了提供良好的用户体验,可以在DragOver...

    jeasyui-datagrid-datagrid

    例如,使用`url`选项指定服务器接口,DataGrid会自动发送请求获取数据。 4. **列定义** DataGrid的列定义可以通过`columns`选项设置,每个列包含字段名(field)、标题(title)和可选的其他属性,如width、align...

Global site tag (gtag.js) - Google Analytics