热门标签 | 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格式自行处理。


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


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • ASP.NET jQuery 实例6 - 实现CheckBoxList成员全选或全取消
    本文介绍了在ASP.NET中使用jQuery实现CheckBoxList成员的全选或全取消操作。通过提供的页面代码示例,可以轻松实现该功能。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 本文介绍了解决IE678伪类不兼容问题的方法,包括少用CSS3和HTML5独有的属性,使用CSS hacker,使用last-child清除浮动、批量添加标签、去掉list item最后一个的border-right等技巧。同时还介绍了使用after清除浮动时加上IE独有属性zoom:1的处理方法。另外,本文还提到可以使用jQuery代替批量添加标签的功能,以及使用负边距和CSS2选择器element+element去掉list item最后一个的border-right的方法。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • jQuery实现简单的动画效果及用法详解
    本文详细介绍了使用jQuery实现简单动画效果的方法,包括显示/隐藏、向上收缩/向下展开、淡入/淡出、自定义动画等。同时提供了具体的用法示例,并解释了参数的含义和使用技巧。通过本文的学习,读者可以掌握如何使用jQuery实现各种动画效果,为网页增添生动和互动性。 ... [详细]
  • 获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法
    本文介绍了获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法,包括使用jQuery的选择器和遍历方法。通过这些方法,可以方便地获取到所需的元素,并进行相应的操作。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
  • angular.element使用方法及总结
    2019独角兽企业重金招聘Python工程师标准在线查询:http:each.sinaapp.comangularapielement.html使用方法 ... [详细]
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社区 版权所有