热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

扩展jqueryeasyuidatagrid之动态绑定列和数据

easyuidatagrid不支持动态加载列,上次使用的方法是自己用$.post()请求,在回调函数中提取出columns配置,添加到原options中去,然后调用$("#datagri

easyui datagrid 不支持动态加载列,上次使用的方法是自己用$.post()请求,在回调函数中提取出columns配置,添加到原options中去,然后调用$("#datagrid").datagrid(options)来重新生成表格,然后使用$("#datagrid").datagrid("loaddata",data)来载入返回的json格式数据。

但是这样做一来麻烦,二来有问题,比如我这儿自带的分页就用不了了。

网上搜得一篇文章,easyui datagrid动态绑定列名和数据原作者直接修改源码。

我的做法是使用扩展方法,只要datagrid的表dom结构不变,理论上此方法通用。

附上代码:

(function(){
$.extend($.fn.datagrid.methods,{
createHeader: function (jq, opts) {
function buildHeader(headerContainer, columnsDefine, frozenHeader) {
//如果列配置为空,直接返回
if (!columnsDefine) {
return;
}
$(headerContainer).show(); //标题显示
$(headerContainer).empty(); //清空原有内容
//生成table的dom对象,添加到header所在的层
var t = $("
").appendTo(headerContainer);
//columns设置格式[[...],[...],[...]],第一个子数组生成表格的一行
for (var i = 0; i var tr = $("").appendTo($("tbody", t));
var cols = columnsDefine[i];
for (var j = 0; j var col = cols[j]; //列设置col
var attr = "";
if (col.rowspan) {//跨行设置
attr += "rowspan=\"" + col.rowspan + "\" ";
}
if (col.colspan) {//跨列设置
attr += "colspan=\"" + col.colspan + "\" ";
}
var td = $("").appendTo(tr); //生成td,设置属性
//是否在第一列添加checkbox
if (col.checkbox) {
td.attr("field", col.field);
$("
").html("").appendTo(td);
} else {
//如果设置了field字段
if (col.field) {
td.attr("field", col.field);
td.append("
");
$("span", td).html(col.title);
$("span.datagrid-sort-icon", td).html(" ");
var cell = td.find("div.datagrid-cell");
if (col.resizable == false) {
cell.attr("resizable", "false");
}
col.boxWidth = $.boxModel ? (col.width - (cell.outerWidth() - cell.width())) : col.width;
cell.width(col.boxWidth);
cell.css("text-align", (col.align || "left"));
} else {
$("
").html(col.title).appendTo(td);
}
}
//隐藏表格
if (col.hidden) {
td.hide();
}
}
}
//是否显示行号
if (frozenHeader && opts.rownumbers) {
var td = $("
");
if ($("tr", t).length == 0) {
td.wrap("").parent().appendTo($("tbody", t));
} else {
td.prependTo($("tr:first", t));
}
}
};
return jq.each(function () {
var dc = $.data(this, "datagrid").dc;
var headerContainer1 = dc.view1.children("div.datagrid-header");
var headerContainer2 = dc.view2.children("div.datagrid-header");
var header1 = headerContainer1.children("div.datagrid-header-inner"); //view1的header,行号标题,一般为空
var header2 = headerContainer2.children("div.datagrid-header-inner"); //表格的header,显示title
buildHeader(header1, opts.frozenColumns, true); //生成冻结表头
buildHeader(header2, opts.columns, false); //生成表头
header1.css("display", opts.showHeader ? "block" : "none");
header2.css("display", opts.showHeader ? "block" : "none");
});
}
});
})(Jquery);

其中function buildHeader(headerContainer, columnsDefine, frozenHeader)函数是从1.2.5版源码中提取出来的(坑爹下划线,符号,用firebug跟着跑了4,5个小时,才大体明白后台生成表格的方法)

使用方法:

一,设置loadFilter属性,指定的方法会在ajax请求成功返回后,datagrid绑定数据之前调用,要求返回符合datagrid要求的json格式数据

function showGrid() {
var optiOns= {
width: gridWidth,
height: gridHeight,
url: "RainStat.aspx",
queryParams:getParams(),
rownumbers : true,
loadMsg:"正在加载数据,请稍候...",
pagination: true,
page:1,
pageSize: 20,
pageList: [10, 20, 30, 40, 50, 100, 500, 1000, 5000],
loadFilter:dataFilter
};
rainGrid = $("#rainGrid");
rainGrid.datagrid(options);
}
二,在loadFilter指定的函数内进行处理,取出服务器端返回的columns设置,加入到当前的options设置中,调用上面扩展的createHeader方法。

function dataFilter(data) {
if (data.data[0].rows.length == 0) {
$.messager.alert("结果", "没有数据!", "info", null);
}
var optiOns= rainGrid.datagrid("options");//取出当前datagrid的配置
options.columns = eval(data.columns);//添加服务器端返回的columns配置信息
rainGrid.datagrid("createHeader", options);//调用扩展方法,创建表格列
rainGrid.datagrid("resize");//重新布局datagrid,因为上面扩展方法调用后,会有一些布局上的小问题
return data.data[0];
}

注意:这是我自己定义的json格式,提取配置信息的方法,请按照自己的json格式自行处理。


至于后台,各们同学自己看着写吧,本菜鸟写的比较烂,就不再献丑了。


推荐阅读
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • linux jq命令 汉字乱码,jQuery中Ajax的Post提交中文乱码的解决方案
    引言:在jQuery的AjaxPOST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢࿱ ... [详细]
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 在掌握Promise调用链的过程中,理解其在异步执行中的核心作用至关重要。链式调用不仅简化了代码结构,提高了可读性,还增强了程序的健壮性和维护性。类似于jQuery中常用的链式调用,如 `$(#app).show().css('color', 'red')`,Promise的链式调用通过 `.then()` 方法实现了异步操作的无缝衔接,使得复杂的异步流程更加直观和高效。掌握这些技巧将有助于开发者更好地处理异步编程中的常见问题,提升开发效率。 ... [详细]
  • 如何在jqGrid中调整shrinkToFit以避免水平滚动条,并解决页面存在垂直滚动条时表格超出父容器的问题
    1、下图右侧为表格超出panel部分页面html代码:jggrid-class ... [详细]
  • Markdown语法说明:http:www.appinn.commarkdown1、前端碎片知识总结篇1.1关于浏览器IE的内核是Trident、Mozilla的内核 ... [详细]
  • ajax与302响应代码测试_JavaScript:在ajax请求中,如果服务器端的响应是302Found,在ajax的回调函数中能够获取这个状态码吗?能够从ResponseHea ... [详细]
  • php购物车页面如何做,HTML代码实现简易购物车
    网上关于购物车实现的代码非常多,本次的这篇文章主要是和大家分享了HTML代码实现简易购物车,有需要的小伙伴可以看一下,接下来讲解一下具体的 ... [详细]
  • 本文探讨了如何在 Java 中将多参数方法通过 Lambda 表达式传递给一个接受 List 的 Function。具体分析了 `OrderUtil` 类中的 `runInBatches` 方法及其使用场景。 ... [详细]
  • 本地存储组件实现对IE低版本浏览器的兼容性支持 ... [详细]
  • 在高清节目的高比特率传输过程中,使用外接USB硬盘进行时间平移(timeshift)时,出现了性能不足和流数据丢失的问题。通过深入研究,我们发现通过对图像组(GOP)和图像头(I-frame)的精确定位技术进行优化,可以显著提升系统的性能和稳定性。本研究提出了改进的图像组与图像头定位算法,有效减少了数据丢失,提高了流媒体传输的效率和质量。 ... [详细]
author-avatar
苦柚甜甜
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有