easyui datagrid 动态添加columns属性
公司在项目设计的时候,有一个需求,就是查出来的表的字段不唯一,一张表的字段可能是三个,也可能是五个,但是却要把它显示到页面,这个给我做ui的带来一点麻烦。因为以前一般用easyui 的datagrid里的columns属性都是对应数据库表里的字段,现在字段都不知道,怎么用datagrid显示数据呢?本人在这里介绍最笨的办法,就是拼接出columns 属性的格式,我承认,我的办法效率不高,但是当你无从下手的时候,,这未尝不是解决问题的办法,当然在解决这个问题之前,我也百度了一下,试了一些办法,有的是是去更改datagrid里的方法,以及从新构造里的的方法,本人是菜鸟,太高深的东西看不懂,所以只用了这个本办法。
第一步:获取这个张表的所有列,(表名你应该知道的),我用的是mysql数据库,所以根据表名获取的sql是:
select column_name from INFORMATION_SCHEMA.columns where table_name='tableName' and TABLE_SCHEMA='dbName';
tableName:是你的表的名字:dbName:是你的数据库的名字。该条sql语句执行的是结果是(这是本人表):

这样就获取表的字段。 第二步:编写js代码,获取后台的方法我就不在此介绍。
var array =[];
var columns=[];
$.ajax({
url:_ctx+'/nodeManage/getMysqlFields',
type:'POST',
data:'id='+node['id'],
success:function(data){//data后台的传过来的表字段数组
$(data).each(function(){
array.push({field:'',title:'',width:''});
});
columns.push(array);
$(data).each(function(index,el){
columns[0][index]['field']= el['column_name'].toLocaleLowerCase();
columns[0][index]['title']= el['column_name'];
columns[0][index]['width']= "130";
});
$('#dg').datagrid({
fit:true,checkOnSelect:true, selectOnCheck:true, singleSelect:true,toolbar:'#queryToolbar',
pageSize : 5,
columns:columns,
dataType: 'json',
pageList: [5,10,30,50,70,100],
pageNumber : 1,
pagination:true,
queryParams:{id:node['id']},
url:_ctx+'/nodeManage/getMd5Datagrid'
});
},
dataType:'json'
});
解题思路:
首先我们知道datagrid colums的属性格式是:[[{field:'createtime',title:'创建时间',width:130},{field:'updatetime',title:'更新时间',width:130},]]。
一开始我以为是字符串,但是当我用console.info()输出带控制台的时候,发现它是个对象,所以一开始字符串拼接就是错了。所以要想动态构造column 的属性格式,必备按照它原来的格式来。
所在我定义两个数组,array[],colums[](这个columns 是我自定的数组对象,不是datagrid的属性)。
$(data).each(function(){
array.push({field:'',title:'',width:''});
});这个方法是为了给array添加一定长度的内容,让后在将这个array通过push()放进自己定义的columns里,这样我们的得到的columns的对象格式就是跟datagrid 一样,然后将自定义的columns付给dagagrid的columns属性(别晕呀)。
$(data).each(function(index,el){
columns[0][index]['field']= el['column_name'].toLocaleLowerCase();(因为field的值必须是小写,用过的都知道,为了防止数据库里建字段的时候你的是大写,所以在这里做个转换)
columns[0][index]['title']= el['column_name'];
columns[0][index]['width']= "130";
});这一步是给刚定义的columns数组赋值,也就是你从后台获取的字段名。像formatter:functions(value,row,index){}也可以在次添加,这里用了两次循环,比较烦。
我再次承认效率上是存在问题的,欢迎请大家品评与指正!
easyui datagrid 动态添加columns属性的更多相关文章
- python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)
介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. # coding=u ...
- easyui datagrid checkbox multiple columns have been done do
lengku1987 2013-01-06 22:27:47 Sponsored Links easyui datagrid checkbox multiple columns have ...
- easyui datagrid 动态加载数据 渲染问题,表格错位问题
$('#dg').datagrid({ url:'datagrid_data.json', columns:[[ {field:'code',title:'Code',width:100}, {fie ...
- EasyUI datagrid动态生成列
任务描述:根据用户选择时间段,生成列数据,如图
- easyui datagrid动态设置行、列、单元格不允许编辑
Easyui datagrid 行编辑.列编辑.单元格编辑设置 功能: 动态对datagrid 进行行.列.单元格编辑进行设置不允许编辑. 禁用行编辑: 在编辑方法调用前,对选择的行进行判断,如果不允 ...
- Easyui datagrid 怎么添加操作按钮,rowStyler
说明:本篇文章主要是展示怎么设置easyUI datagrid的格式,包括行样式和列样式,以及添加操作按钮列 开发环境 vs2012 asp.net mvc4 c# 1.效果图 3.HTML代码 & ...
- easyui datagrid 动态加入、移除editor
使用easyui 行编辑的时候完毕编辑的功能比較简单,可是假设要依据一个框的值动态改变别的值或者编辑的时候禁用某个框的时候就比較麻烦了. 比方像以下这样:加入行的时候每一个值都是手动输入,改动的时候第 ...
- easyui datagrid 动态操作editor 的方法
easyui本身是不提供这么细节的功能的,需要我们自己拓展下: 在easyui.min.js中扩展: $.extend($.fn.datagrid.methods, { addEditor : fun ...
- 导航栏动态添加act属性
最近做了一个网站,需要设置导航栏的act属性,这里需要用到addClass以及removeClass: $('#topName li').removeClass('active'); $(this). ...
随机推荐
- STM32F之IAR6.5 J-Link程序下载错误
错误01:Keil环境下使用J-Link SW模式下载程序,而IAR6.5则出现如图1-1的错误.
- net之工作流工程展示及代码分享(记录)
http://www.cnblogs.com/thanks/p/4183235.html
- CSS中box-sizing属性的理解与部分用法
今天看了一些关于box-sizing的一些资料,在这里整理一下,希望也能对大家有所帮助. box-sizing是CSS的一个属性,很好的解决了盒模型的相关问题.CSS中的盒模型(Box model)分 ...
- impress.js webslide 参数
data-transition-duration="2000" 改变切换场景的速度,默认1000data-perspective="500" 改变透视的深度,默 ...
- Linux下swoole的安装配置
前几天搭建swoole环境,在安装php的swoole扩展时不知道什么原因,提示成功,但是使用的时候不能加载,最后决定重新安装php试试,顺便记录了php的安装过程 wget http://cn2.p ...
- C++ Daily 《5》----虚函数表的共享问题
问题: 包含一个以上虚函数的 class B, 它所定义的 对象是否共用一个虚函数表? 分析: 由于含有虚函数,因此对象内存包含了一个指向虚函数表的指针,但是这个指针指向的是同一个虚函数表吗? 实验如 ...
- centos7下安装nodejs
http://www.runoob.com/nodejs/nodejs-install-setup.html这个教程中注明 注意:Linux上安装Node.js需要安装Python 2.6 或 2.7 ...
- 听课程C# Intermediate: Classes, Interfaces and OOP的笔记,持续修改更新ing
在第二章第7节中,我尝试并给我的Vistal Studio 2015加装了Resharper,感觉非常好用,现在就分享下我的一点心得. 首先为了防止Resharper的快捷键失灵,可以先重置所有的 V ...
- [转载 ]POJ 1273 最大流模板
转载 百度文库花了5分下的 不过确实是自己需要的东西经典的最大流题POJ1273 ——其他练习题 POJ3436 . 题意描述: 现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条水渠,给 ...
- 安装XAMPP后APACHE不能启动解决方法
自己的xampp中的apache启动失败,在网上找到了一篇文章,感觉不错,原文如下: Xampp的获得和安装都十分简单,你只要到以下网址: http://www.apachefriends.org/z ...