• 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();
    }

    至此,本例子已完。

    希望对各位有所帮助。

  • 相关阅读:
    使用viewpager实现QQ界面切换效果
    实例教程十一:访问通信录中的联系人和添加联系人
    实例教程十四:视频刻录(调用前置摄像头)
    实例教程十二:为应用添加多个Activity与参数传递
    【30篇突击 android】源码统计八
    GIF动画 汇总帖子+实例
    Android ProgressBar 几乎全部的用法
    实例教程十三:拍照
    android NDK 知识汇总
    【原创】oracle中大数据量更新的测试
  • 原文地址:https://www.cnblogs.com/ZC_Mo-Blog/p/4648398.html
Copyright © 2020-2023  润新知