Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法

这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter。

默认情况下,Ext.Net GridPanel中的列都具有排序功能,效果如下:

如果要禁用列排序,需要在列模型中添加一个属性Sortable="false"

客户端排序

排序是对Store的操作。如果我们要在一个Store中加入排序,可以使用下面的配置:

<Sorters>
<ext:DataSorter Property="Name" Direction="DESC"></ext:DataSorter>
</Sorters>

有了这段代码,我们的Store将会在显示之前进行排序。效果如下:

服务器端排序

默认情况下,排序是在客户端进行的,不会进行远程请求。如果Store一次加载了所有数据,客户端排序没有问题;如果Store是分页异步加载数据,那么这种排序方式就不能满足需要了,我们需要异步的排序。

我们来将Store改为异步分页的Store,代码如下:

<ext:Store runat="server" ID="storeUserInfo" PageSize="5"
RemoteSort="true" OnReadData="storeUserInfo_ReadData">
<Model>
<ext:Model ID="UserInfoModel" runat="server" IDProperty="ID">
<Fields>
<ext:ModelField Name="ID" Type="Int"></ext:ModelField>
<ext:ModelField Name="Name" Type="String"></ext:ModelField>
<ext:ModelField Name="Gender" Type="String"></ext:ModelField>
<ext:ModelField Name="Age" Type="Int"></ext:ModelField>
</Fields>
</ext:Model>
</Model>
<Proxy>
<ext:PageProxy></ext:PageProxy>
</Proxy>
<Sorters>
<ext:DataSorter Property="Name" Direction="DESC"></ext:DataSorter>
</Sorters>
</ext:Store>

我们对Store进行修改,加入了RemoteSort属性,表示是否进行远程排序,然后加入默认的排序规则,Property表示排序字段,Direction表示排序方向(正序、倒序)

OnReadData事件的处理方法如下:

protected void storeUserInfo_ReadData(object sender, Ext.Net.StoreReadDataEventArgs e)
{
int start = e.Start;
int limit = e.Limit; var userInfoList = UserInfo.GetData();
e.Total = userInfoList.Count; storeUserInfo.DataSource = userInfoList.Skip(start).Take(limit).ToList();
storeUserInfo.DataBind();
}

上面的这段代码只是完成了Store的异步分页,如果想要我们的Store进行服务器端的排序,还需要修改ReadData事件处理方法,加入排序的代码:

//处理排序的相关代码
if (e.Sort.Count() > 0)
{
foreach (var item in e.Sort)
{
switch (item.Property)
{
case "Name":
userInfoList.Sort((u1, u2) =>
{
switch (item.Direction)
{
case Ext.Net.SortDirection.Default:
case Ext.Net.SortDirection.ASC:
default:
return string.Compare(u1.Name, u2.Name);
case Ext.Net.SortDirection.DESC:
return 0 - string.Compare(u1.Name, u2.Name);
}
});
break;
case "Age":
userInfoList.Sort((u1, u2) =>
{
switch (item.Direction)
{
case Ext.Net.SortDirection.Default:
case Ext.Net.SortDirection.ASC:
default:
return u1.Age - u2.Age;
case Ext.Net.SortDirection.DESC:
return u2.Age - u1.Age;
} });
break;
}
}
}

在这段代码中,item.Property表示排序字段;item.Direction表示排序方向。

如果在.ashx中使用排序,可以先构造一个请求参数,然后使用上面的代码进行排序:

var prms = new StoreRequestParameters(context);
// use prms.Sort[0].Property and prms.Sort[0].Direction

通过context构造一个请求参数,然后可以获取参数里面的Sort数组。

Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法的更多相关文章

  1. 【Ext.Net学习笔记】05:Ext.Net GridPanel的用法(包含Filter、Sorter、Grouping、汇总(Summary)的用法)

    GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: <ext:GridPanel runat="server&qu ...

  2. 【Ext.Net学习笔记】06:Ext.Net GridPanel的用法(GridPanel 折叠/展开行、GridPanel Selection、 可编辑的GridPanel)

    GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候. 下面来看看效果: 使用行折叠/展开功能之 ...

  3. Ext.Net学习笔记18:Ext.Net 可编辑的GridPanel

    Ext.Net学习笔记18:Ext.Net 可编辑的GridPanel Ext.Net GridPanel 有两种编辑模式:编辑单元格和编辑行. 单元格编辑: 行编辑: 可以看出,单元格编辑的时候,只 ...

  4. Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行

    Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候 ...

  5. Ext.Net学习笔记17:Ext.Net GridPanel Selection

    Ext.Net学习笔记17:Ext.Net GridPanel Selection 接下来是Ext.Net的GridPanel的另外一个功能:选择. 我们在GridPanel最开始的用法中已经见识过如 ...

  6. Ext.Net学习笔记15:Ext.Net GridPanel 汇总(Summary)用法

    Ext.Net学习笔记15:Ext.Net GridPanel 汇总(Summary)用法 Summary的用法和Group一样简单,分为两步: 启用Summary功能 在Feature标签内,添加如 ...

  7. Ext.Net学习笔记12:Ext.Net GridPanel Filter用法

    Ext.Net学习笔记12:Ext.Net GridPanel Filter用法 Ext.Net GridPanel的用法在上一篇中已经介绍过,这篇笔记讲介绍Filter的用法. Filter是用来过 ...

  8. Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法

    Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法 Ext.Net GridPanel可以进行Group操作,例如: 如何启用Grouping功能呢?只需要在Grid ...

  9. Ext.Net学习笔记11:Ext.Net GridPanel的用法

    Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...

随机推荐

  1. sql server Case when 的用法

    sql Case 仅仅返回第一个符合条件的值,剩下的Case部分将会被自动忽略. Case 的使用有两种格式:简单Case函数和Case搜索函数. 简单Case 函数: Case sex when ' ...

  2. QT无法定位入口点QtCore4.dll(万恶的matlab啊)

    今天安装QT, 参考: http://www.qtcn.org/bbs/simple/?t53333.html 遇到问题 发现怎么更matlab有关了.果断把系统环境变量改一下:放到了最前面 呵呵,行 ...

  3. codeforce 651B Beautiful Paintings

    题意:后一个比前一个大就加一,问最大次数. #include<cstdio> #include<cstring> #include<algorithm> #incl ...

  4. Storm系列(七)架构分析之Scheduler-调度器[DefaultScheduler]

    Storm默认的任务调度器.实现如下: 1  (defn –prepare [this conf]) 2  (defn –schedule [this ^Topologies topologies ^ ...

  5. HW4.3

    public class Solution { public static void main(String[] args) { final double POUND_PER_KILOGRAM = 2 ...

  6. hadoop-2.6.0.tar.gz + spark-1.5.2-bin-hadoop2.6.tgz的集群搭建(单节点)

    前言 本人呕心沥血所写,经过好一段时间反复锤炼和整理修改.感谢所参考的博友们!同时,欢迎前来查阅赏脸的博友们收藏和转载,附上本人的链接.http://www.cnblogs.com/zlslch/p/ ...

  7. Redis_php 学习

    转载内容: PhpRedis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系很有用;以下是redis官方提供的命令使用技巧: Redis::__construct构造函数 1 ...

  8. python 多行字符串

    字符串是要用引号(双引号,单引号,多行用三个引号)引起来 TypeError: not enough arguments for format string you have to specify m ...

  9. poj 1523 SPF【点双连通求去掉割点后bcc个数】

    SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7246   Accepted: 3302 Description C ...

  10. jQuery的DOM操作小案例

    案例一:下拉列表左右选择 <body> <div> <select style="width:60px" multiple size="10 ...