<table id="dg"> </table>
1:url方式
$(function () { $('#dg').datagrid({ title: 'Sortable Column', width: 550, height: 250, url: 'datagridHandler.ashx', columns: [[ { field: 'username', title: 'username', width: 80 }, { field: 'password', title: 'password', width: 80 }, ]], pagination: true, sortName: 'itemid', sortOrder: 'asc' }); });datagridHandler.ashx为一般处理程序,直接返回字符串,注意格式(rows一定要是一个数组,只有一条数据也需要[]格式必须是一个数组),所以后台定义时放到一个list里边就对了
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Write("{\"rows\":[{\"username\":\"C++ Primer中文版(第4版)\",\"password\":4939}],\"total\":5}"); }
从数据库读取在转化成json格式
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; IDataBae idb = new SqlOperator("Data Source = .;Initial Catalog = BookWeb;User Id = sa;Password = 1234;"); List<Users> u = idb.List<Users>("select * from Users", null); string sqls = u.ToJson(); context.Response.Write(sqls); }
2:loadData方式
$(function () { $('#dg').datagrid({ title: 'Sortable Column', width: 550, height: 250, columns: [[ { field: 'username', title: 'username', width: 80 }, { field: 'password', title: 'password', width: 80 }, ]], pagination: true, sortName: 'itemid', sortOrder: 'asc' }); var obj = { "rows": [{ "username": "aj", "password": 4939}], "total": 5 }; $('#dg').datagrid('loadData',obj); });
通过ajax后台请求数据绑定
这里使用的是asp.net的ajax返回json他会自己加一个d所以要处理一下
$(function () { $('#dg').datagrid({ title: 'Sortable Column', width: 550, height: 250, columns: [[ { field: 'username', title: 'username', width: 80 }, { field: 'password', title: 'password', width: 80 }, ]], pagination: true, sortName: 'itemid', sortOrder: 'asc' }); getdata(); }); function getdata() { $.ajax({ type: "post", url: "MyEasyui.aspx/GetUsers", contentType: "application/json;charset=utf-8", dataType: "json", success: function (result) { var dataObj = eval("(" + result.d + ")"); $('#dg').datagrid('loadData', dataObj); } }); }MyEasyui.aspx/GetUsers对应的方法
[WebMethod] public static string GetUsers() { IDataBae idb = new SqlOperator("Data Source = .;Initial Catalog = BookWeb;User Id = sa;Password = 1234;"); List<Users> u = idb.List<Users>("select * from Users", null); string sqls = u.ToJson(); return sqls; }效果与使用一般处理程序的数据库查询一样
注意:asp.net使用url方式为一般处理程序还行,但是使用asp.net的方法明明是返回的json字符串,response确是整个页面!!!!!!!
只有用ajax请求后用loadData绑定数据
二:分页
只要你指定了url且分页条属性设置为true,他就会在加载与点击分页菜单时请求后台并自动传递两个参数page与rows,当前页与一页显示的数量
我们只需要利用这两个查询进行后台查询就可以了
分页时我们需要传递一个total总条数给前台,格式就包装标准的datagrid需要的格式
$('#dg').datagrid({ title: 'Sortable Column', pagination:true, fitColumns:false, fit: true, url:'datagridHandler.ashx', nowrap: true, sortName: 'bname', sortOrder:'desc', columns: [[ { field: 'bid', title: 'bid', width: 100 }, { field: 'bname', title: 'bname', width: 100,sortable:true }, { field: 'bauthor', title: 'bauthor', width: 100 }, { field: 'bpublisher', title: 'bpublisher', width: 100 }, { field: 'bpubtime', title: 'bpubtime', width: 100 }, { field: 'btype', title: 'btype', width: 100 }, { field: 'btypec', title: 'btypec', width: 100 }, { field: 'bdescribe', title: 'bdescribe', width: 200 } ]] });atagridHandler.ashx
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; int page = Convert.ToInt32(context.Request.Form["page"]); int rows = Convert.ToInt32(context.Request.Form["rows"]); IDataBae idb = new SqlOperator("Data Source = .;Initial Catalog = BookWeb;User Id = sa;Password = 1234;"); List<book> u = idb.List<book>("select top " + rows + " * from book where bid not in (select top " +( rows * (page - 1)) + " bid from book )", null); DGDate<book> dtd = new DGDate<book>(); dtd.total = idb.OneCol<int>("select count(*) as c from book","c",null); dtd.rows = u; context.Response.Write(dtd.ToJson()); }
/// <summary> /// 构建datagrid需要的json格式, /// 需要一个total与rows /// </summary> public class DGDate<T> { public int total { get; set; } public List<T> rows { get; set; } }这种格式可以直接用匿名类实现更简洁一些 new { rows = list, total = Count }
如果没有使用url,在点击分页条时就不会自动请求后台,但是点击分页条时必然有一个回调函数,
回调的参数就包涵了page与rows,只是如果指定url他就会在回调函数中去请求指定的后台,
所以想用loadData方式就需要找到相应的回调函数,在回调函数中执行自己的请求然后在绑定数据
二:排序
1:remote远程排序
首先指定排序的字段与方式
sortName: 'bname',
sortOrder:'desc',
这样就会在请求url的时候多带两个参数
然后回台只需要使用这两个参数进行相应的查询即可
并且如果在相应的column指定了sortable:true
如{ field: 'bname', title: 'bname', width: 100,sortable:true }
点击相应列可以改变排序方式
同样是点击他时会请求一个回台,更具参数查询即可
2:remoteSort设置成false可以直接支持排序了