EasyUI入门4 datagrid数据加载的正确方式
来源:互联网 发布:雨滴软件 编辑:程序博客网 时间:2024/06/05 20:36
概述
为什么说数据加载需要一个正确的方式,因为坑实在是太多了,一般情况下我们至少有这些需求:
- 页面一打开自动加载数据,不需要还去点一下刷新按钮
- 数据量大需要分页
- 为了页面样式对齐需要分页
当数据超出页面范围时,会弹出滚动条,右侧滚动条会挤出一块空间破坏右边对齐效果(强迫症选项) - 有查询条件输入控件,页面刷新时需要采集控件的值
- 执行完一个操作后,需要执行reload
代码
html文件
<script type="text/javascript"> $(function () { AutoDiscipline(); //绑定专业 //dg初始化:绑定数据、创建右键菜单 $("#dg").datagrid({ loadFilter: pagerFilter }).datagrid({ contentType: "application/x-www-form-urlencoded; charset=UTF-8", url: "../../Controller/Interface/POtoPriceLib.ashx?Action=Refresh", queryParams: { DisciplineName: encodeURIComponent($('#ddlDiscipline').combobox('getValue')), PurchaseNumber: encodeURIComponent($('#PurchaseNumber').textbox('getValue')) }, onRowContextMenu: function(e, rowIndex, rowData) { //右键时触发事件 //三个参数:e里面的内容很多,真心不明白,rowIndex就是当前点击时所在行的索引,rowData当前行的数据 e.preventDefault(); //阻止浏览器捕获右键事件 $(this).datagrid("clearSelections"); //取消所有选中项 $(this).datagrid("selectRow", rowIndex); //根据索引选中该行 $('#menu').menu('show', { //显示右键菜单 left: e.pageX,//在鼠标点击处显示菜单 top: e.pageY }); e.preventDefault(); //阻止浏览器自带的右键菜单弹出 } }); var pager = $('#dg').datagrid('getPager'); // get the pager of datagrid pager.pagination({ pageSize: 20, pageNumber: 1, pageList: [10, 20, 30, 40, 50], beforePageText: '第',//页数文本框前显示的汉字 afterPageText: '页 共 {pages} 页', displayMsg: '当前显示 {from} - {to} 条记录 共 {total} 条记录' }); //选择专业刷新采购包列表.datagrid({ loadFilter: pagerFilter }) $('#ddlDiscipline').combobox({ onSelect: function (row) { if (row != null) { $.ajax({ contentType: "application/x-www-form-urlencoded; charset=UTF-8", url: "../../Controller/Interface/POtoPriceLib.ashx?Action=Refresh", type: "get", data: { "DisciplineName": encodeURIComponent(row.专业名称), "PurchaseNumber": encodeURIComponent($('#PurchaseNumber').textbox('getValue')) }, dataType: "json", success: function (data) { $("#dg").datagrid("options").pageNumber = 1; $("#dg").datagrid("loadData", data); } }); } } }); }); //分页用方法 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 AutoDiscipline() { $.ajax({ contentType: "application/x-www-form-urlencoded; charset=UTF-8", url: "../../Controller/PurchasePackage/PurchasePackage.ashx?Action=AutoDiscipline", type: "get", data: {}, //中文须编码,用encodeURIComponent dataType: "json", success: function (data) { //值显示到input里 - EasyUI写法 //var msg = $.parseJSON(data); $("#ddlDiscipline").combobox("loadData", data); //动态取数据 $('#ddlDiscipline').combobox('select', '-全部专业-'); } }); } //刷新合同列表 function RefreshPOList() { $.ajax({ contentType: "application/x-www-form-urlencoded; charset=UTF-8", url: "../../Controller/Interface/POtoPriceLib.ashx?Action=Refresh", type: "get", data: { "DisciplineName": encodeURIComponent($('#ddlDiscipline').combobox('getValue')), "PurchaseNumber": encodeURIComponent($('#PurchaseNumber').textbox('getValue')) }, dataType: "json", success: function (data) { $("#dg").datagrid("options").pageNumber = 1; $("#dg").datagrid("loadData", data); } }); } //同步到价格库 function SendToPriceLib() { var row = $('#dg').datagrid('getSelected'); var psguid = row.PSGUID; if (row.合同状态代码 == 'A') { event.returnValue = confirm("确认要把该合同同步到价格库吗?"); if (event.returnValue == true) { if (row) { var rsguid = row.RSGUID; $.ajax({ contentType: "application/x-www-form-urlencoded; charset=UTF-8", url: "../../Controller/Interface/POtoPriceLib.ashx?Action=SendToPriceLib", type: "post", data: { "PSGUID": psguid }, //中文须编码,用encodeURIComponent dataType: "text", success: function (data) { if (data == "ok") { $.messager.alert('提示信息', "同步到价格库成功", 'info'); $("#dg").datagrid("reload", { "DisciplineName": encodeURIComponent($('#ddlDiscipline').combobox('getValue')), "PurchaseNumber": encodeURIComponent($('#PurchaseNumber').textbox('getValue')) }); //动态取数据 } else { $.messager.alert('提示信息', "同步失败," + data, 'warning'); } }, error: function () { $.messager.alert('提示信息', "同步失败,错误代码20202", 'warning'); } }); } } else { } } else if (row.合同状态代码 == 'R' || row.合同状态代码 == 'G') { $.messager.alert('提示信息', "合同未发布不能同步到价格库", 'warning'); } else { $.messager.alert('提示信息', "合同状态未知,不能同步到价格库!", 'warning'); } } </script>
ashx文件:
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //context.Response.Write("Hello World"); //获取请求的动作 string action = context.Request["Action"]; if (string.IsNullOrEmpty(action)) return; //页面参数 long projectId = Int64.Parse(Encrypt.Base64Decrypt(CookiesHelper.GetCookie_l("MC_pId"))); //项目ID string domainName = Encrypt.Base64Decrypt(CookiesHelper.GetCookie_l("MC_doNa")); //域登录名 string json_stream = string.Empty; //dataTable转置成的stream流 string json_stream_format = string.Empty; //dataTable转置成的stream流(easyui datagrid格式) //支付款项功能需要的页面传值参数 string psguidInPayment = context.Request["PSGUID"]; switch (action) { case "Refresh"://刷新PO列表 PriceLib po = new PriceLib(); po.ProjectId = projectId; po.Discipline = HttpUtility.UrlDecode(context.Request["DisciplineName"].ToString()); //中文解码 po.PONumber = HttpUtility.UrlDecode(context.Request["PurchaseNumber"].ToString()); //中文解码 DataTable json_data = po.Select(); json_stream = DatatableAndJson.ToJson(json_data); json_stream_format = DatatableAndJson.JsonFormatdg(json_data != null ? json_data.Rows.Count : 0, json_stream); context.Response.Write(json_stream_format); break; } }
代码说明
AutoDiscipline(); //绑定专业
如果你的页面有下拉框形式的查询条件输入控件,大概会用到这类方法,比如我的页面需要一个下拉框来选择专业,那么在页面初始化的时候这个下拉框里的选项就需要准备好,因此在$(function(){})里面需要一个方法来做这件事。
用queryParams方式传递参数
queryParams: { DisciplineName: encodeURIComponent($('#ddlDiscipline').combobox('getValue')), PurchaseNumber: encodeURIComponent($('#PurchaseNumber').textbox('getValue'))},
另一种传递参数的写法:
//dg初始化:绑定数据、创建右键菜单$("#dg").datagrid({ loadFilter: pagerFilter }).datagrid({ contentType: "application/x-www-form-urlencoded; charset=UTF-8", url: "../../Controller/PurchaseGenerate/PurchaseGenerate.ashx?Action=Refresh&DisciplineName=" + encodeURIComponent($('#ddlDiscipline').combobox('getValue')) + "&PurchaseNumber=" + encodeURIComponent($('#PurchaseNumber').textbox('getValue'))});
这样写会出现一个奇怪的bug,当你执行完一个动作比如发布合同之后你希望调用reload方法让datagrid刷新,这个刷新将会把你刚才的操作结果,比如合同状态的描述更新到页面上,但是你会发现$(‘#ddlDiscipline’).combobox(‘getValue’)此时取不到正确的值,虽然我选中的选项叫“管道”,凡是返回值始终是“,管道”,字符串的起始位置多出一个逗号,你的reload肯定无法根据多出一个逗号的参数得到正确的数据集,我并没有找到原因但是如果你用queryParams方式传值就没有这个问题了。
带参数使用reload方法
$("#dg").datagrid("reload",{ "DisciplineName": encodeURIComponent($('#ddlDiscipline').combobox('getValue')), "PurchaseNumber": encodeURIComponent($('#PurchaseNumber').textbox('getValue'))}); //动态取数据
阅读全文
0 0
- EasyUI入门4 datagrid数据加载的正确方式
- easyui datagrid加载数据的两种方式
- EasyUI datagrid 动态加载表格数据的方式
- easyui datagrid 的数据加载
- easyui datagrid 的数据加载
- easyui datagrid 的数据加载
- EasyUi的datagrid数据加载
- easyui datagrid 的数据加载Json数据
- 再次谈谈easyui datagrid 的数据加载
- jQuery easyui datagrid 的数据加载
- jQuery easyui datagrid 的数据加载
- 再次谈谈easyui datagrid 的数据加载
- 再次谈谈easyui datagrid 的数据加载
- 再次谈谈easyui datagrid 的数据加载
- easyui datagrid 中数据加载的问题
- easyui 之datagrid 的数据加载
- EasyUI DataGrid动态加载数据
- EasyUi datagrid重新加载数据
- NIO直接缓冲区与非直接缓冲区
- fatal error C1083: 无法打开包括文件:“opencv2/core/core_c.h”: No such file
- 在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib 及一些问题
- 文章标题 leetcode刷题日记——最长子串
- ibatis存储过程调用
- EasyUI入门4 datagrid数据加载的正确方式
- unity C#中,用BinaryWrite和BinaryReader来存取数据
- opencv_traincascade 训练自己的分类器
- ElasticSearch 5.0.0 安装部署常见错误或问题
- 【shell脚本】逐行处理文本文件
- iOS 模块详解—「Runloop 面试、工作」看我就
- spring中的简单AOP
- 1、初识socke
- 在myeclipse利用ant构建时遇到The path xxx appears to be part of Subversion 1.7 (SVNKit 1.4) or greater解决办法