废话不说,直接上例子:

前台代码:

<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. Homebrew新一代OS X套件管理工具 高速安装Git

    在Mac上安装一些开源程序,除了自己下下载.编译( ./configure && make && make install) 之外,通常最方便的选择就是用套件管理工具來 ...

  2. c# 根据窗口截图,合并图片

    c# 根据窗口截图,合并图片 public class CaptureWindows { #region 类 /// <summary> /// Helper class containi ...

  3. oracle 自动添加序号列 排序

    select      HSL.sortno,                    HSL.B,                    HSL.A,                    row_n ...

  4. 18 java 代理模式 (转)

    静态代理 1.新建一个接口,这个接口所提供的方法是关于数据库操作的 public interface EmployeeDao { public void updateSalary(); } 2.建一个 ...

  5. hdu3714 三分

    Error Curves Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  6. C/C++中define的使用

    代码: #include <iostream> using namespace std; #define a 10 void foo(); void bar(); void foo(){ ...

  7. POJ 1286 Necklace of Beads(项链的珠子)

    Necklace of Beads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7874   Accepted: 3290 ...

  8. shell编程-1到100的求和与冒泡排序

    Shell编程 一.  for循环 生成列表 {起始数..结束数} 命令生成列表 `seq [起始数] [步进长度] 结束数 ` for  l in {1..5};do for  l in `seq ...

  9. B'day Gift

    def main(): n = int(raw_input()) sum = 0 for i in range(n): sum += float(raw_input()) print '%.1f' % ...

  10. python文件_写入

    1.输入的数据写入到一个文本: #这个写入操作不会将原来的数据覆盖掉 n=raw_input('请输入写入的文件数据:') fl2=open('g:/2.txt','a') fl2.write('\n ...