ObjectDataSourc用法之三(排序)

SortParameterName參數主要用於對數據源控件進尾排序

1.       准備條件

參數:ObjectDataSource用法之一(SelectMethod來進行簡單的邦定)

添加一個處理對象排序的類Reverser

public class Reverser<T> : IComparer<T>

{

private Type type = null;

private ReverserInfo info;

public Reverser(string className, string name, ReverserInfo.Direction direction)

{

try

{

this.type = Type.GetType(className, true);

this.info.name = name;

this.info.direction = direction;

}

catch (Exception e)

{

throw new Exception(e.Message);

}

}

int IComparer<T>.Compare(T t1, T t2)

{

object x = this.type.InvokeMember(this.info.name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, t1, null);

object y = this.type.InvokeMember(this.info.name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, t2, null);

if (this.info.direction != ReverserInfo.Direction.ASC)

Swap(ref x, ref y);

return (new CaseInsensitiveComparer()).Compare(x, y);

}

private void Swap(ref object x, ref object y)

{

object temp = null;

temp = x;

x = y;

y = temp;

}

}

public struct ReverserInfo

{

public enum Direction

{

ASC = 0,

DESC,

};

public enum Target

{

CUSTOMER = 0,

FORM,

FIELD,

SERVER,

};

public string name;

public Direction direction;

public Target target;

}

2.       在業務處理類中添加如下方法

public List<EntityMember> OrderItems(string order)

{

string orderName = order.Split(' ')[0];

ReverserInfo.Direction dir = ReverserInfo.Direction.ASC;

if (order.Split(' ').Length>1 && order.Split(' ')[1] == "DESC") dir = ReverserInfo.Direction.DESC;

List<EntityMember> result = new List<EntityMember>();

XmlDocument doc = new XmlDocument();

doc.Load(_path);

XmlNodeList nodes = doc.SelectNodes("/Members/Member");

foreach (XmlNode node in nodes)

{

result.Add(new EntityMember(node.SelectSingleNode("./UID").InnerText, node.SelectSingleNode("./PWD").InnerText, node.SelectSingleNode("./Email").InnerText));

}

Reverser<EntityMember> reverser = new Reverser<EntityMember>("EntityMember", orderName, dir);

result.Sort(reverser);

return result;

說明:當按降序排列的時候,參數order的內容為:屬性名稱+空格+DESC

當按升序排列的時候,參數order的內容為:屬性名稱

3.       Aspx頁面的內容為

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"

SelectMethod="OrderItems" SortParameterName="order" TypeName="Member"></asp:ObjectDataSource>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"

DataSourceID="ObjectDataSource1" AllowSorting="true">

<Columns>

<asp:BoundField DataField="UID" HeaderText="UID" SortExpression="UID" />

<asp:BoundField DataField="PWD" HeaderText="PWD" SortExpression="PWD" />

<asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />

</Columns>

</asp:GridView>

說明:SortParameterName為指定SelectMethod參數指定的方法中用於排序的參數名稱

ObjectDataSourc用法之三(排序)相关推荐

  1. java的sort的用法_Java排序方法sort用法详解

    Java排序方法sort用法详解 发布于 2020-2-28| 复制链接 摘记: 本文实例为大家分享了java对数组.集合的排序方法,供大家参考,具体内容如下对数组的排序: ```java //对数组 ...

  2. mysql union如何排序_Mysql中UNION用法与排序

    最近也是在写项目中碰到的这个问题,需要将两个SELECT查询结果组合起来进行分组排序,想到了用union方法,用TP的union操作根本无法完成复杂的union操作,于是搜罗了一下,先说一下union ...

  3. row_number() over (partition by....order by...)用法 分组排序

    row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编 ...

  4. sort函数的用法(C++排序库函数的调用)对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。

    对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了. (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c+ ...

  5. stable_sort的用法与排序算法

    一.sort和stable_sort的区别: c++中的stable_sort排序函数与sort功能差不多,排序所使用的思路不一样. 1.sort(a,a+N) ,其中a是数组,a+N表示对a[0]至 ...

  6. Stream的特性、用法、stream().map().collect()用法

    Stream的特性.用法.stream().map().collect()用法 1.举例说明 有一个集合: List<User> users = getList(); 现在想获取User的 ...

  7. scala排序——ordering vs ordered

    在最近探索scala的过程中,发现一个比较重要的问题,那就是排序,排序在业务代码中还是很常见的,最常用的排序就是对集合调用sorted[B >: A](implicit ord: Orderin ...

  8. 分享Silverlight/WPF/Windows Phone一周学习导读(06月06日-06月11日)

    Windows 8预览版推出后,Silverlight社区掀起一番新的"Silverlight灭亡"讨论,由于Windows 8预览版中微软重点强调HTML 5和Javascrip ...

  9. C++ :vector的使用

    VECTOR vector 定义 用法: 1.文件包含: 2.变量声明: 3.具体的用法以及函数调用: 4.内存管理与效率 5.Vector 内存管理成员函数的行为测试 6.vector的其他成员函数 ...

最新文章

  1. IDC报告称经济衰退将促进云计算发展
  2. leveldb java_LevelDB 代码撸起来!
  3. 存图matlab,matlab中保存图片的方法
  4. sizeof(函数名)=?
  5. redis底层数据结构简述
  6. 【LeetCode-SQL每日一题】——183. 从不订购的客户
  7. 流言终结者- Flutter和RN谁才是更好的跨端开发方案?
  8. C#LeetCode刷题之#242-有效的字母异位词(Valid Anagram)
  9. Linux查找大文件 (find的用法)
  10. 不能将参数转化为lparam_如何将管理需求转化为信息化方案
  11. python安装jupyterlab_【python】jupyter lab安装与配置
  12. C# ASPX页面做上传提示:超过了最大请求长度,解决方法
  13. 开发 Windows 8 Bing地图应用(4)
  14. HTML中常用的列表标签
  15. go-redis 读和存储json数组
  16. CANoe集成解决方案
  17. There was a problem with the instance info replicator
  18. 高级计算机软考科目,软考高级中哪个科目好考
  19. MySQL 删除数据库
  20. 阿里巴巴、腾讯、百度和京东金融落户雄安新区 | 亚马逊加入FB与微软阵营,共同支持开源AI平台ONNX

热门文章

  1. MySQLWorkbench注释
  2. 【译】Angular 开发44条“军规”
  3. Ubuntu 配置 spark
  4. iOS-读写plist文件
  5. Study Linux --- Shell Script
  6. Java Web学习(七)HttpServletResponse(客户端响应)
  7. 《C#图解教程》读书笔记之六:接口和转换
  8. step2 . day2 Linux基础命令和常用知识汇总
  9. ElementUI el-table 在flex下的宽度自适应问题
  10. css对齐 挖坑~