GridView动态构建OrderBy进行排序

废话不说,直接上例子:

前台代码:

<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 = 1; i <= 10; i++)
    {
        TestClass t = new TestClass() { Field1 = i, Field2 = 11 - 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();
}

 

至此,本例子已完。

 

希望对各位有所帮助。

转载于:https://www.cnblogs.com/ZC_Mo-Blog/p/4648398.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值