废话不说,直接上例子:

前台代码:

<asp:GridView ID="GridView1" runat="server" AllowSorting="true"
AutoGenerateColumns="false" onsorting="GridView1_Sorting">
<Columns>
<asp:BoundField HeaderText="Column1" DataField="Field1" SortExpression="Field1" />
<asp:BoundField HeaderText="Column2" DataField="Field2" SortExpression="Field2" />
</Columns>
</asp:GridView>

注意:

1、需要设置AllowSorting=true

2、需要设置每一列的SortExpression,设置的值为绑定数数据源中的一列,排序时,根据该设置值为排序依据

3、增加onsorting事件

后台代码:

1、本例子使用到的测试类

[Serializable]
public class TestClass
{
public int Field1 { get; set; }
public int Field2 { get; set; }
}

2、为测试例子准备测试数据

protected void Page_Load(object sender, EventArgs e)
{
List<TestClass> oData = new List<TestClass>();
for (int i = ; i <= ; i++)
{
TestClass t = new TestClass() { Field1 = i, Field2 = - i };
oData.Add(t);
}
ViewState["Data"] = oData;
this.GridView1.DataSource = oData;
this.GridView1.DataBind();
}

3、编辑排序事件

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
//从ViewState取得绑定在界面的数据源
List<TestClass> oDatas = (List<TestClass>)ViewState["Data"]; //从Session取得当前字段的排序状态
if (Session[e.SortExpression] == null)
{
Session[e.SortExpression] = SortDirection.Ascending;
} //判断当前,如果为升序,则以倒序排序一次,如果为倒序,则以升序排序一次,并更新当前排序
//动态的重点在于利用反射,根据e.SortExpression取得排序栏位
if ((SortDirection)Session[e.SortExpression] == SortDirection.Ascending)
{
oDatas = oDatas.OrderBy(c => c.GetType().GetProperty(e.SortExpression).GetValue(c, null)).ToList();
Session[e.SortExpression] = SortDirection.Descending;
}
else
{
oDatas = oDatas.OrderByDescending(c => c.GetType().GetProperty(e.SortExpression).GetValue(c, null)).ToList();
Session[e.SortExpression] = SortDirection.Ascending;
} //重新绑定一次排序後的数据以显示结果
GridView gv = sender as GridView;
gv.DataSource = oDatas;
gv.DataBind();
}

至此,本例子已完。

希望对各位有所帮助。

GridView动态构建OrderBy进行排序的更多相关文章

  1. 基础才是重中之重~Emit动态构建方法(参数和返回值)

    回到目录 对于Emit我们知道它的可以动态构建程序集,类型,方法,属性等,或者说只要手动使用C#创建的东西使用Emit也都可以动态创建它们,Emit由于它的特别之处,所以在很多领域得到了广泛的应用,像 ...

  2. Lind.DDD.ExpressionExtensions动态构建表达式树,实现对数据集的权限控制

    回到目录 Lind.DDD框架里提出了对数据集的控制,某些权限的用户为某些表添加某些数据集的权限,具体实现是在一张表中存储用户ID,表名,检索字段,检索值和检索操作符,然后用户登陆后,通过自己权限来构 ...

  3. LINQ to SQL 运行时动态构建查询条件

    在进行数据查询时,经常碰到需要动态构建查询条件.使用LINQ实现这个需求可能会比以前拼接SQL语句更麻烦一些.本文介绍了3种运行时动态构建查询条件的方法.本文中的例子最终实现的都是同一个功能,从Nor ...

  4. Mybatis之动态构建SQL语句

    今天一个新同事问我,我知道如何利用XML的方式来构建动态SQL,可是Mybatis是否能够利用注解完成动态SQL的构建呢?!!答案是肯定的,MyBatis 提供了注解,@InsertProvider, ...

  5. GridView动态增加行

    GridView动态增加行GridView动态增加行 很多时候,我们需要可编辑的表格,来比较方便的进行数据的录入,比如学习成绩的录入.当然这就要求能够动态的增加行,来一次性录入多个学生的信息.现在用A ...

  6. [C#] C# 与 Nessus 交互,动态构建扫描任务计划

    C# 与 Nessus 交互,动态构建扫描任务计划 目录 什么是 Nessus? 创建会话类 NessusSession 登录测试 创建操作类 NessusManager 操作测试 什么是 Nessu ...

  7. C# Lambda 表达式学习之(三):动态构建类似于 c => c.Age == null || c.Age > 18 的表达式

    可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...

  8. C# Lambda 表达式学习之(四):动态构建类似于 c => c.Age == 2 || c.Age == 5 || c => c.Age == 17 等等一个或多个 OrElse 的表达式

    可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...

  9. Spring data JPA中使用Specifications动态构建查询

    有时我们在查询某个实体的时候,给定的条件是不固定的,这是我们就需要动态 构建相应的查询语句,在JPA2.0中我们可以通过Criteria接口查询,JPA criteria查询.相比JPQL,其优势是类 ...

随机推荐

  1. SRM 588 D2 L2:GUMIAndSongsDiv2,冷静思考,好的算法简洁明了

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12707 算法决定一切,这道题目有很多方法解,个人认为这里 ve ...

  2. .net中将DataTable导出到word、Excel、txt、htm的方法

    dt:DataTable strFile:fileName strExt:type private void GridExport(DataTable dt, string strFile, stri ...

  3. QiniuUpload- 一个方便用七牛做图床然后插入markdown的小工具

    最近一段时间有用markdown做笔记,其他都好,但是markdown插入图片挺麻烦的,特别是想截图之后直接插入的时候.需要首先把图片保存了,然后还要上传到一个地方生成链接才能插入.如果有个工具可以直 ...

  4. oracle SQL语句练习MERGE、模糊查询、排序、

    Oracle支持的SQL指令可分为数据操作语言语句.数据定义语言语句.事务控制语句.会话控制语句等几种类型:1.数据操作语言语句数据操作语言语句(Data manipulation language, ...

  5. VMware SphereESXi上传系统镜像

    VMware SphereESXi上传系统镜像 打开右侧[摘要]选项卡 在[资源]中选择存储器中的存储,右键[浏览数据库存储] 选择工具栏[创建文件夹]图标,命名后保存 这样随后找到存储设备,浏览刚才 ...

  6. Impala 源码分析-FE

    By yhluo 2015年7月29日 Impala 3 Comments Impala 源代码目录结构 SQL 解析 Impala 的 SQL 解析与执行计划生成部分是由 impala-fronte ...

  7. Windows命令行(DOS命令)教程-6 (转载)http://arch.pconline.com.cn//pcedu/rookie/basic/10111/15325_5.html

    8. type [功能] 在屏幕上显示文本文件内容命令 [格式] type [C:][path]filename.ext [说明] type命令用来在屏幕上快速.简便地显示文本文件的内容,扩展名为TX ...

  8. iOS横竖屏

    现在开发的APP大部分界面是竖屏的,只有视频播放的界面和webview阅读文字的界面是可以横屏操作的. 那么就进行如下处理: 1.首先确保APP支持横屏旋转 2.我的App里面都是走UINavigat ...

  9. 控制反转IOC与依赖注入DI【转】

    转自:http://my.oschina.net/1pei/blog/492601 一直对控制反转.依赖注入不太明白,看到这篇文章感觉有点懂了,介绍的很详细. 1. IoC理论的背景我们都知道,在采用 ...

  10. C#代码设置窗体和Panel的位置大小

    1.设置Panel位置大小 private void button2_Click(object sender, EventArgs e) { panel1.Visible = false; panel ...