排序我主要注意了三部分内容:
1、在控制表格的JavaScript代码中,加入datagerid的onSortColum事件,
onSortColum: function (sort,order) { //其中sort代表排序列字段名称;order:排序列的顺序(ASC或DESC) $('#dg').datagrid('reload', { sort: sort, order: order }); }
2、在需要排序的单元格将 sortable设置为true
columns: [[ { field: 'adminName', title: '登录名', width: 300}, { field: 'trueName', title: '用户名', width: 300, sortable: true },//sortable设置为true { field: 'mobilePhone', title: '联系电话', width: 200 } ]],
3、.ashx文件 需要得到前台界面反馈回来的值,然后对其进行操作;将得到的 sort和order作为查询的一个条件,传至后台
得到dataset数据,将dataset数据转换为JSON数据格式返回
这里的JSON数据转换的方法我封装起来,在这里只是进行了调用,前面的几节的代码是没有封装过的,是写在.ashx里,直接用的。
public void ProcessRequest(HttpContext context) { string sort = !string.IsNullOrEmpty(context.Request.QueryString["sort"]) ? context.Request.QueryString["sort"] : "trueName"; //获得前端的sort string order = !string.IsNullOrEmpty(context.Request.QueryString["order"]) ? context.Request.QueryString["order"] : "asc"; //获得前端的order Query(context, sort, order); } public void Query(HttpContext context, string sort, string order) { context.Response.ContentType = "text/plain"; DataTable dta = BRL.BLL.A_admin.GetListByOrder(sort,order).Tables[0]; //获得数据库数据(这里我将获取数据的方法进行了封装,这里只是调用就可以了,具体如何获取数据参照本节后面的内容) int count = dta.Rows.Count; string strJson =BRL.Common.JsonDatachange.Dataset2Json(BRL.BLL.A_admin.GetListByOrder(sort,order), count);//DataSet数据转化为Json数据 ,这里的方法我也进行了封装,这里只是实现了方法的调用 context.Response.Write(strJson); }
4、在后台根据筛选调用数据库数据时,应将筛选条件改为:
public static DataSet GetListByOrder(string sort, string order) { StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT * FROM A_Admin order by "+sort+" "+order); //修改筛选条件 return DBUtility.DbHelperSQL.Query(strSql.ToString()); }
具体的全部代码:
前端部分的:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dataGrid.aspx.cs" Inherits="Web.Management.dataGrid" %> <!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> <link href="easyui/themes/default/easyui.css" rel="stylesheet" /> <link href="easyui/themes/icon.css" rel="stylesheet" /> <link href="css/style.css" rel="stylesheet" /> <script src="easyui/jquery.min.js"></script> <script src="easyui/jquery.easyui.min.js"></script> <script type="text/javascript" src="http://www.w3cschool.cc/try/jeasyui/datagrid-detailview.js"></script> <script src="easyui/locale/easyui-lang-zh_CN.js"></script> <script src="js/echarts.js"></script> <script src="js/shine.js"></script> <script type="text/javascript"> $(function () { $('#dg').datagrid({ url: 'ashx/Handler1.ashx', width: 800, title: '设备管理', method:'get', columns: [[ { field: 'adminName', title: '登录名', width: 300}, { field: 'trueName', title: '用户名', width: 300, sortable: true }, { field: 'mobilePhone', title: '联系电话', width: 200 } ]], pagination: true, pageSize:1, pageList: [1, 2, 3], onSortColum: function (sort,order) { $('#dg').datagrid('reload', { sort: sort, order: order }); } }) }) function pagerFilter(data) { if (typeof data.length == 'number' && typeof data.splice == 'function') { // is array data = { total: data.length, rows: data } } var dg = $(this); var opts = dg.datagrid('options'); var pager = dg.datagrid('getPager'); pager.pagination({ onSelectPage: function (pageNum, pageSize) { opts.pageNumber = pageNum; opts.pageSize = pageSize; pager.pagination('refresh', { pageNumber: pageNum, pageSize: pageSize }); dg.datagrid('loadData', data); } }); if (!data.originalRows) { data.originalRows = (data.rows); } var start = (opts.pageNumber - 1) * parseInt(opts.pageSize); var end = start + parseInt(opts.pageSize); data.rows = (data.originalRows.slice(start, end)); return data; } $(function () { $('#dg').datagrid({ loadFilter: pagerFilter }).datagrid('loadData', getData()); }); </script> </head> <body> <form id="form1" runat="server"> <div> <table id="dg"></table> </div> </form> </body> </html>
.ashx:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; namespace Web.Management.ashx { /// <summary> /// Handler1 的摘要说明 /// </summary> public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { string sort = !string.IsNullOrEmpty(context.Request.QueryString["sort"]) ? context.Request.QueryString["sort"] : "trueName"; string order = !string.IsNullOrEmpty(context.Request.QueryString["order"]) ? context.Request.QueryString["order"] : "asc"; Query(context, sort, order); } public void Query(HttpContext context, string sort, string order) { context.Response.ContentType = "text/plain"; DataTable dta = BRL.BLL.A_admin.GetListByOrder(sort,order).Tables[0]; int count = dta.Rows.Count; string strJson =BRL.Common.JsonDatachange.Dataset2Json(BRL.BLL.A_admin.GetListByOrder(sort,order), count);//DataSet数据转化为Json数据 context.Response.Write(strJson); } public bool IsReusable { get { return false; } } } }
封装的转换JSON方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace BRL.Common { public class JsonDatachange { public static string Dataset2Json(DataSet ds, int total = -1) { StringBuilder json = new StringBuilder(); foreach (DataTable dt in ds.Tables) { //{"total":5,"rows":[ json.Append("{\"total\":"); if (total == -1) { json.Append(dt.Rows.Count); } else { json.Append(total); } json.Append(",\"rows\":["); json.Append(DataTable2Json(dt)); json.Append("]}"); } return json.ToString(); } public static string DataTable2Json(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder(); for (int i = 0; i < dt.Rows.Count; i++) { jsonBuilder.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { jsonBuilder.Append("\""); jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\":\""); jsonBuilder.Append(dt.Rows[i][j].ToString()); jsonBuilder.Append("\","); } if (dt.Columns.Count > 0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } jsonBuilder.Append("},"); } if (dt.Rows.Count > 0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } return jsonBuilder.ToString(); } } }
sql语句封装的方法:
public static DataSet GetListByOrder(string sort, string order) { StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT * FROM A_Admin order by "+sort+" "+order); return DBUtility.DbHelperSQL.Query(strSql.ToString()); }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dataGrid.aspx.cs" Inherits="Web.Management.dataGrid" %>
<!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> <link href="easyui/themes/default/easyui.css" rel="stylesheet" /> <link href="easyui/themes/icon.css" rel="stylesheet" /> <link href="css/style.css" rel="stylesheet" /> <script src="easyui/jquery.min.js"></script> <script src="easyui/jquery.easyui.min.js"></script> <script type="text/javascript" src="http://www.w3cschool.cc/try/jeasyui/datagrid-detailview.js"></script> <script src="easyui/locale/easyui-lang-zh_CN.js"></script> <script src="js/echarts.js"></script> <script src="js/shine.js"></script> <script type="text/javascript"> $(function () { $('#dg').datagrid({ url: 'ashx/Handler1.ashx', width: 800, title: '设备管理', method:'get', columns: [[ { field: 'adminName', title: '登录名', width: 300}, { field: 'trueName', title: '用户名', width: 300, sortable: true }, { field: 'mobilePhone', title: '联系电话', width: 200 } ]], pagination: true, pageSize:1, pageList: [1, 2, 3], onSortColum: function (sort,order) { $('#dg').datagrid('reload', { sort: sort, order: order }); } }) }) function pagerFilter(data) { if (typeof data.length == 'number' && typeof data.splice == 'function') { // is array data = { total: data.length, rows: data } } var dg = $(this); var opts = dg.datagrid('options'); var pager = dg.datagrid('getPager'); pager.pagination({ onSelectPage: function (pageNum, pageSize) { opts.pageNumber = pageNum; opts.pageSize = pageSize; pager.pagination('refresh', { pageNumber: pageNum, pageSize: pageSize }); dg.datagrid('loadData', data); } }); if (!data.originalRows) { data.originalRows = (data.rows); } var start = (opts.pageNumber - 1) * parseInt(opts.pageSize); var end = start + parseInt(opts.pageSize); data.rows = (data.originalRows.slice(start, end)); return data; }
$(function () { $('#dg').datagrid({ loadFilter: pagerFilter }).datagrid('loadData', getData()); }); </script> </head><body> <form id="form1" runat="server"> <div> <table id="dg"></table> </div> </form></body></html>