1. 程式人生 > >02.手把手教你 .Net EasyUI DataGrid(資料表格排序)

02.手把手教你 .Net EasyUI DataGrid(資料表格排序)

在上一篇我已經介紹了從資料庫載入資料到DataGrid的方法,那麼今天的這篇部落格是介紹,怎樣排序你載入的資料。

(1)DataGrid的排序相關的屬性,表2-1

sortable boolean 如果為true,則允許列使用排序。
sortName string 定義哪些列可以進行排序。
sortOrder string 定義列的排序順序,只能是'asc'或'desc'。
remoteSort boolean 定義從伺服器對資料進行排序。

(2)前臺程式碼

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="sort.aspx.cs" Inherits="web._20160521.sort" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="../js/jquery-1.7.1.min.js"></script>
    <script src="../EasyUI/jquery.min.js"></script>
    <script src="../EasyUI/jquery.easyui.min.js"></script>
    <link href="../EasyUI/themes/icon.css" rel="stylesheet" />
    <script src="../EasyUI/locale/easyui-lang-zh_CN.js"></script>
    <link href="../EasyUI/themes/default/easyui.css" rel="stylesheet" />
    <script type="text/javascript">
        $(function () {
            $('#tb1').datagrid({
                url:'../20160521/sort.ashx',
                width: 550,
                title: '裝置管理',
                method:'get',
                columns: [[
                    { field: 'numID', title: '裝置編號', width: 150,sortable:'true'},
                    { field: '儀器名稱', title: '名稱', width: 150, sortable: 'true' },
                    { field: '型號', title: '型號', width: 150, sortable: 'true' },
                    { field: '單價', title: '價格', width: 100, sortable: 'true' }
                ]],
                pagination: true,
                pageSize:5,
                pageList: [5, 10, 15],
                sortName:'numID',
                sortOrder: 'desc',
                remoteSort:'false'
            })
        })
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <table id="tb1"></table>
    </div>
    </form>
</body>
</html>
效果圖2-2:

要進行排序,必須根據前臺傳來的引數進行排序,所以用谷歌瀏覽器F12看看DataGrid控制元件提交了那些引數,圖2-3:

可以看出,引數比上一節多了兩個,sort與order,而我們在前臺程式碼中設定了

sortName:'numID',
sortOrder: 'desc',

所以這兩對是相互對應的,一個是欄位,一個是排序方式,那麼應該重寫上一節課的分頁查詢方法,加上兩個引數sort與order,

SQL查詢語句:SELECT * FROM (  SELECT ROW_NUMBER() OVER (order by T.numID desc)AS Row, T.*  from tb_equipment T  ) TT WHERE TT.Row between 1 and 5

T.numID變成T.引數sort,desc變成引數order

(3)重寫後的查詢分頁方法的程式碼(將其貼上到上一節的幫助類中):

        /// <summary>
        /// 查詢分頁資料,並排序
        /// </summary>
        /// <param name="sort">列欄位</param>
        /// <param name="order">排序asc或者desc</param>
        /// <param name="startIndex"></param>
        /// <param name="endIndex"></param>
        /// <returns></returns>
        public DataSet GetListByPage(string sort, string order, int startIndex, int endIndex)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT * FROM ( ");
            strSql.Append(" SELECT ROW_NUMBER() OVER (");
            if (!string.IsNullOrEmpty(order.Trim())|| !string.IsNullOrEmpty(sort.Trim()))
            {
                strSql.Append("order by T." + sort + " " + order);
            }
            else
            {
                strSql.Append("order by T.ID asc");
            }
            strSql.Append(")AS Row, T.*  from tb_equipment T ");
            strSql.Append(" ) TT");
            strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);
            return Query(strSql.ToString());
        }

(4)後臺程式碼

新建一個新的一般處理程式,接受前臺提交的兩個新的引數order與sort,然後效用新的分頁查詢方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;

namespace web._20160521
{
    /// <summary>
    /// sort1 的摘要說明
    /// </summary>
    public class sort1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";

            int page = 1, rows = 10;

            //EasyUI自帶的兩個引數rows與page ,表示當前頁與行數
            if (context.Request.QueryString["rows"] != null)
            {
                rows = int.Parse(context.Request.QueryString["rows"].ToString().Trim());
            }
            if (context.Request.QueryString["page"] != null)
            {
                page = int.Parse(context.Request.QueryString["page"].ToString().Trim());
            }

            //查詢分頁 stratIndex endIndex
            int stratIndex, endIndex;
            stratIndex = (page - 1) * rows + 1;
            endIndex = page * rows;

            //查詢排序 sort order
            string sort = "numID", order = "desc";
            if (context.Request.QueryString["sort"] != null)
            {
                sort = context.Request.QueryString["sort"].ToString().Trim();
            }
            if (context.Request.QueryString["order"] != null)
            {
                order = context.Request.QueryString["order"].ToString().Trim();
            }

            //查詢資料庫
            HelperClass.SqlHelper sqlhelper = new HelperClass.SqlHelper();
            //獲取查詢資料的行數
            int count = sqlhelper.EUGetRecordCount();
            //封裝資料到dataset
            DataSet ds = sqlhelper.GetListByPage(sort,order,stratIndex, endIndex);
            //將dataset轉化為Json格式
            string strToJon = HelperClass.ToJson.DatasetJson(ds, count);
            context.Response.Write(strToJon);
            context.Response.End();
        }


        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

那麼我們的排序功能已經實現了!

還有一個屬性remoteSort沒介紹,remoteSort設定為true,則執行ajax將sort與order兩個引數提交到伺服器,那麼排序是在伺服器上進行再顯示到資料控制元件中,如果設定為false的話,那麼排序是在瀏覽器上進行的,也就是排序,排的是瀏覽器記憶體的資料,我們的分頁是真分頁,每次只查5條,所以排序只在這5條中進行。