`
huangro
  • 浏览: 327644 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Extjs Grid 排序

阅读更多
首先,需要给所有需要排序的字段设置属性sortable: true,参考示例代码:
// create the grid
var grid = new Ext.grid.GridPanel({
	el:'grid-products',
	width:405,
	height:300,
	title:'Adventure Works Products',
	store: store,
	stripeRows: true,
	loadMask: true,
	enableHdMenu: false,

	// grid columns
	columns:[{
		header: "id",
		id: 'ProductID',
		dataIndex: 'ProductID',
		hidden:true
	},{
		header: "Product Name",
		dataIndex: 'Name',
		width: 200,
		sortable:true
	},{
		header: "Product Number",
		dataIndex: 'ProductNumber',
		width: 100,
		sortable:true
	},{
		header: "Safety Stock Level",
		dataIndex: 'SafetyStockLevel',
		width: 100
	}],
	// put paging bar on the bottom
	bbar: pagingBar
});


这样你就可以在客户端进行排序了。如果需要在服务器端进行排序,则需要设置属性 remoteSort: true, 参考示例代码:
// create the Data Store
var store = new Ext.data.JsonStore({
	root: 'lstProducts',
	totalProperty: 'RowCount',
	idProperty: 'ProductID',
	fields: [
		'Name','ProductID', 'ProductNumber', 'ReorderPoint','SafetyStockLevel'
	],
	remoteSort:true,
	proxy:pmProxy
});


现在,所有排序的信息将汇聚到PageMethodProxy,主要是两个:
* sort : 表示字段的id
* dir : 排序的方式(有两个 ASC 或 DESC)

或许需要修改下PageMethodProxy,参考如下:
Ext.data.PageMethodProxy = function(config){
	Ext.data.PageMethodProxy.superclass.constructor.call(this);
	Ext.apply(this, config);
};

Ext.data.PageMethodProxy.TRANS_ID = 1000;
Ext.data.PageMethodProxy.arr_trans = Array();

Ext.extend(Ext.data.PageMethodProxy, Ext.data.DataProxy, {
    load : function(params, reader, callback, scope, arg) {
        if(this.fireEvent("beforeload", this, params) !== false){
            var p = Ext.apply(params, this.extraParams);
            var transId = ++Ext.data.PageMethodProxy.TRANS_ID;
            var trans = {
                id : transId,
                params : params,
                arg : arg,
                callback : callback,
                scope : scope,
                reader : reader
            };
            if(typeof p.sort == "undefined")
                p.sort = "";
            if(typeof p.dir == "undefined")
                p.dir = "";

            eval("PageMethods." + this.pageMethod + "(p.start,p.limit,p.sort,p.dir,this.handleResponse)");

            Ext.data.PageMethodProxy.arr_trans[Ext.data.PageMethodProxy.TRANS_ID] = trans;
        }
        else{
            callback.call(scope||this, null, arg, false);
        }

    },	

    isLoading : function(){
        return this.trans ? true : false;
    },

    abort : function(){
        if(this.isLoading()){
            this.destroyTrans(this.trans);
        }
    },

    handleResponse : function(o){
        var trans = Ext.data.PageMethodProxy.arr_trans[Ext.data.PageMethodProxy.TRANS_ID];
        var result;
        try {
            result = trans.reader.readRecords(o);
        }catch(e){
            this.fireEvent("loadexception", this, o, trans.arg, e);
            trans.callback.call(trans.scope||window, null, trans.arg, false);
            return;
        }
        this.trans = false;
        trans.callback.call(trans.scope||window, result, trans.arg, true);
    }
});


服务器端查询排序程序主要写法如下(此处用ASP.NET)
[System.Web.Services.WebMethod]
public static ProductList GetProducts(int PageNumber,int MaximumRows,string SortColumnName, string SortDirection)
{
	//calculating the start row index
	int Start = PageNumber + 1;
	//calculating the end row index
	int End = PageNumber + MaximumRows;

	ProductList productList = new ProductList();
	//setting up sql connection to execute the query
	SqlConnection sqlConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True");
	sqlConnection.Open();
	//setting up the command object with a parameterized query and sql connection
	using (SqlCommand command = new SqlCommand(GetQuery(SortColumnName,SortDirection), sqlConnection))
	{
		//Creating Sql Start Paramter
		SqlParameter StartParameter = new SqlParameter();
		StartParameter.DbType = DbType.Int32;
		StartParameter.ParameterName = "startRowIndex";
		StartParameter.Value = Start;
		//Creating Sql End Parameter
		SqlParameter EndParameter = new SqlParameter();
		EndParameter.DbType = DbType.Int32;
		EndParameter.ParameterName = "endRowIndex";
		EndParameter.Value = End;
		//Adding Start Parameter to the command object
		command.Parameters.Add(StartParameter);
		//Adding End Parameter to the command object
		command.Parameters.Add(EndParameter);
		//Executing Reader
		using (IDataReader reader = command.ExecuteReader())
		{
			//Creating a list of objects from the fetched rows
			while (reader.Read())
			{
				productList.lstProducts.Add(ConstructProduct(reader));
			}
		}
	}
	//closing the connection
	sqlConnection.Close();
	//Assigning total row count for the given query so that it can
	//be used by the grid to set up total number of pages
	productList.RowCount = GetRowCount();
	return productList;
}

private static String GetQuery(String ColumnName,String SortDirection)
{

	StringBuilder stringBuilder = new StringBuilder();
	stringBuilder.Append(" SELECT * FROM ( ");
	if(!ColumnName.Trim().Equals(String.Empty) && !SortDirection.Trim().Equals(String.Empty))
		stringBuilder.Append(" SELECT	ROW_NUMBER() OVER (ORDER BY "+ColumnName.Trim().ToUpper()+" "+ SortDirection.Trim().ToUpper()+") AS row_num,ProductID,[Name],ProductNumber,SafetyStockLevel,ReorderPoint ");
	else
		stringBuilder.Append(" SELECT	ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS row_num,ProductID,[Name],ProductNumber,SafetyStockLevel,ReorderPoint ");
	stringBuilder.Append(" FROM	Product ");
	stringBuilder.Append(" ) AS TempTable WHERE row_num>=@startRowIndex AND row_num<=@endRowIndex ");
	return stringBuilder.ToString();
}



分享到:
评论
4 楼 huangro 2010-10-08  
最好是参照extjs的api来做: http://dev.sencha.com/deploy/dev/docs/
我没碰到过json数据源不能排序的问题, 你是否可以提供数据源瞧瞧?
3 楼 天涯海角tour 2010-09-25  
知道了,谢谢,
2 楼 天涯海角tour 2010-09-25  
为什么 我用XML数据源就可以排序,用json就不行呢,
1 楼 天涯海角tour 2010-09-25  
PageMethodProxy 在哪里啊,找不到啊

相关推荐

    Extjs grid 中文排序问题修正

    Extjs grid 中文排序问题修正,其实很简单,请自己看源代码

    ExtJs表格grid中文排序函数方法

    功能: 中文排序功能 具体: 实现按照中文信息,进行排序 用法: 将此方法,放到ext-all.js文件最后,或者放到html页面最上面,总之要在Ext初始化之后,实际代码调用之前执行。

    ExtJs+Dwr带分页分组传参后台排序功能的grid

    ExtJs+Dwr带分页分组传参后台排序功能的grid 主要包含:这个主要用到ExtJS+DWR+Spring+Hibernate,主要包括浏览页(usernamerecord.jsp),脚步文件(usernamerecord.js),dwr分页代理脚本文件(dwrproxy.js),...

    Ext.net实现GridPanel拖动行、上移下移排序功能DEMO

    对于GridPanel中拖动选中行排序的实现,网上有不少ExtJs实现的例子,但是没有找到使用Ext.net实现的,正好最近有个需求要使用,干脆来写一个。 DEMO功能说明: 1、拖动GridPanel选中行到新位置排序。 2、在拖动结束...

    ExtJs中gridpanel分组后组名排序实例代码

    主要介绍了ExtJs中gridpanel分组后组名排序实例代码,有需要的朋友可以参考一下

    extjs2.2.1

    单选行,多选行,高亮显示选中的行,推拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现。 自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染...

    extjs_GroupPropertyGrid.js

    基于extjs分组propertyGrid ,分组不排序

    ext.net-extjs

    单选行,多选行,高亮显示选中的行,拖拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现。 自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染...

    EXTJS4.0 MVC 架构 GRID 应用

    基于EXT4.0 MVC 模式开发GRID DEMO 包括:GRID 分页、分组、排序、编辑等等常用功能 访问路径:http://localhost/Ext4Mvc/gridManager/gm.html

    深入浅出ExtJS第2版

    3.3.3 让Grid支持按列排序 35 3.3.4 解决中文排序 35 3.3.5 显示日期类型数据 37 3.4 在单元格里显示红色的字、图片和按钮 38 3.5 给Grid的行和列设置颜色 41 3.6 自动显示行号和复选框 42 3.6.1 自动显示...

    EXTJS 3.3.1例子

     单选行,多选行,高亮显示选中的行,拖拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现。  自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行...

    extjs3.2 资源包文件

    ExtJS是一种主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。 功能丰富,无人能出其右。 无论是界面之美,还是功能之强,ext的表格控件都高居榜首。 单选行,多选行,高亮显示选中的行,推拽改变列...

    ExtJS(ajax框架) 4.2.1

    单选行,多选行,高亮显示选中的行,拖拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现。 自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染...

    Extjs中文文档.pdf

    ExtJS是一种主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。  功能丰富,无人能出其右  无论是界面之美,还是功能之强,ext的表格控件都高居榜首。  单选行,多选行,高亮显示选中的行,推拽...

    ExtJS下grid的一些属性说明

    1.界面修改(css style): Extjs中界面风格与我们产品本身的风格有很大不同,从边框、选中行的颜色到鼠标移动到的... GroupingView, EditorGridPanel): Extjs的grid功能强大,如排序、隐藏列或移动列等,这些都有一些属

    jq-extgrid v1.2 表格插件

    extgrid 是一款jquery上的gird插件 界面风格采用了类似easyui extjs 界面风格样式 可通过css修改自己想要的样式 extgrid具有列大小 位置改变 排序 分组 分页 工具栏 扩展行 rowNumber 多选列 编辑列 行列锁 ajax...

    精通JS脚本之ExtJS框架.part2.rar

    《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计...

    extjs4.0开发技术文档

    单选行,多选行,高亮显示选中的行,拖拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现。 自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,...

    ExtJS 4.2.0

    单选行,多选行,高亮显示选中的行,拖拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现。 自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,...

Global site tag (gtag.js) - Google Analytics