datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)
一、动态定义列头
在ajax中,用datatable再去重新配置列头,当然传回的数据中,要有对应放列头的键值对
我自定义了Mock数据,用于前端自己交互。
其中,rowdata用于存放传回的数据,col_define用于存放定义的列头,targets表示第几列,title表示列名,data是为了对应data下的rowdata数据
$.mockjax({
url: "/salary_import",
status: 200,
responseText: {
'code': 'ok',
'Msg': '小垃圾',
'data': {
'rowdata': [
{
'名字': '呆头鹅',
'身份证': 123456789451,
'exist': 0,
'基本工资': 1000,
'职位工资': 100,
'绩效工资': 10,
'应扣工资': 2000
}, {
'名字': '小学鸡',
'身份证': 12123214124,
'exist': 0,
'基本工资': 2000,
'职位工资': 300,
'绩效工资': 30,
'应扣工资': 3000
}, {
'名字': '奔比',
'身份证': 123456789451,
'exist': 0,
'基本工资': 1000,
'职位工资': 100,
'绩效工资': 10,
'应扣工资': 2000
}],
'col_define': [{
'targets': 0,
'data': '名字',
'title': '名字'
}, {
'targets': 1,
'data': '身份证',
'title': '身份证'
}, {
'targets': 2,
'data': '基本工资',
'title': '基本工资'
}, {
'targets': 3,
'data': '职位工资',
'title': '职位工资'
},{
'targets': 4,
'data': '绩效工资',
'title': '绩效工资'
},{
'targets': 5,
'data': '应扣工资',
'title': '应扣工资'
}]
}
}
});
那么你ajax交互的时候,就可以
var opts = [];
$.ajax({
url: '/salary_import',
type: 'POST',
async: false,
cache: false,
dataType: 'json',
beforeSend: function () {
},
success: function (res) {
if ('ok' === res['code']) {
alert('解析完成!');
console.log('返回数据 是', res['data']);
opts.data = res['data']['rowdata'];
// opts.data = res.data.rowdata;
console.log(opts.data);
opts.columns = res['data']['col_define'];
var excel = $('#salary_excel_table').DataTable({
'language': lan,
"dom": 'lB<"top"f><"toolbar">rt<"bottom"ip><"clear">',
"paging": true,
"lengthChange": true,
"info": true,
'destroy': true,
"deferRender": true,
'columns': opts.columns,
'data': opts.data,
});
不知道是否是插件之间兼容性问题,反正,如果我直接先在外面初始化了datatable,给opts先赋了初始配置值,然后再在ajax下,通过改变对应变量再赋值回datatable下的配置文件,即
var excel = $('#salary_excel_table').DataTable(opts);会莫得什么卵用,因为我百度上都是这样教的,可能单单是我的问题吧,只能重新写份自定义配置,会保险很多,这里就是动态定义列头了,通过后台给的数据,直接描绘前端的列头
二、给某行添加事件
var person=$('#person_table').Datatable(..........);//里面的配置自己去配置你们想要后台给你们的data,格式就不教了
$("#person_table").on("click","tr",function(){
var table_data =person.row(this).data();
console.log(table_data);
var department=table_data.department;
var id=table_data.id;
var name=table_data.name;
$.ajax({
url:'/point',
type:'POST',
data:{
department:department,
id:id,
name:name
},
cache: false,
async: true,
success: function (result) {
console.log(result);
var m = $('#money_table').DataTable();
reloadData(m, result['data']['data_money']);
},
error: function () {
alert('德玛西亚')
}
})
});
function reloadData(table, dataList) {
var currentPage = table.page();
table.clear();
table.rows.add(dataList);
table.page(currentPage).draw(false);
};
点击Datatable下某行,就能够获取到该行数据,放好id,姓名和部门,然后用ajax将这三个数据发给后台,让后台返回给你需要的数据,去渲染另一个datatable(这里你随便怎样都可以,也可以做跳转啥的),重要的是前后端那些数据格式要对好,不然都会出现列数据对不到的错误,还有就是这个reloadData很重要!
三、初始显示空数据
这个就更简单了,你一开始配置表格的时候嘛,可以不写ajax,但是写好列行数据格式,反正没人传给你的会,就是空,等你点击什么或者导入什么的时候,success了再ajax到对应的表的行数据就行了
(所以看清楚,一开始再DataTable里没有AJAX数据获得的话,就是没有行数据的,会显示没有数据,但是列头还是存在的,所以下面没有ajax)
var money_table = $('#money_table').DataTable({
'language': lan,
"dom": 'lB<"top"f><"toolbar">rt<"bottom"ip><"clear">',
"paging": true,
"lengthChange": true,
"info": true,
"order": [
[0, "desc"]
],
"columnDefs": [
{
"title": "应发",
"targets": 0
},
{
"title": "应扣",
"targets": 1
},
{
"title": "实发",
"targets": 2
},
{
"title": "个税",
"targets": 3
},
{
"title": "年月",
"targets": 4
},
{
"title": "功能",
"targets": 5 ,
"render": function (data, type, full, meta) {
if (data) {
return express_html
} else {
return ''
}
}
}
],
'columns':[
{'data':'yf'},
{'data':'yk'},
{'data':'sf'},
{'data':'gs'},
{'data':'yy-mm'},
{'data':null}
],
'destroy':true,
"deferRender": true
});
datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)的更多相关文章
- JQuery实现表格动态增加行并对新行添加事件
实现功能: 通常在编辑表格时表格的行数是不确定的,如果一次增加太多行可能导致页面内容太多,反应变慢:通过此程序实现表格动态增加行,一直保持最下面有多个空白行. 效果: 一:原始页面 二:表1增加新行并 ...
- easyui动态生成双列头
实习时老大交给任务,让我做这样一个效果,选择日期并点击查询时,动态生成列头,下一列要求对应日期的星期. 效果图: 下面贴出查询的单击函数: //查询按钮 function queryByDate(){ ...
- easyui动态生成列
需求:一个id对应多个key value 将id作为标识列 key值作为表头 value作为值显示.数据表可分为两张表 param数据表: 下表一个id对应上表多个key及value 如下图 id_p ...
- SQL Server 行转列,列转行。多行转成一列
一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...
- WPF + RDLC + 动态生成列 + 表头合并
如下,评论超过20条,马上发代码*(੭*ˊᵕˋ)੭*ଘ,效果如下: 代码逻辑简单. WPF使用RDLC需要使用如下DLL 新建WPF 窗体,黏贴下大概如下 <Window xmlns:rv=&q ...
- 动态定义数组 .xml
pre{ line-height:1; color:#3c3c3c; background-color:#d2c39b; font-size:16px;}.sysFunc{color:#627cf6; ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 动态改变列
jQuery EasyUI 数据网格 - 动态改变列 数据网格(DataGrid)列可以使用 'columns' 属性简单地定义.如果您想动态地改变列,那根本没有问题.为了改变列,您可以重新调用dat ...
- easyui如何动态改变列的编辑属性
动态改变列的编辑属性 var tt=$('#dg').datagrid('getColumnOption', 'yearContent'); //通过列名获得此列 tt.editor={type:'t ...
- Oozie调度报错——ORA-00918:未明确定义列
Oozie在执行sqoop的时候报错,同样的SQL在sqoop中可用,在oozie中不可用: Caused by: java.sql.SQLSyntaxErrorException: ORA-0091 ...
随机推荐
- Docker最全教程之使用TeamCity来完成内部CI、CD流程(十六)
本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置.教程中也分享了一个简单的CI.CD流程,仅作探讨.不过由于篇幅有限,完整的DevOps,我们后续独立探讨. 为了降 ...
- Android屏幕适配讲解与实战
文章大纲 一.屏幕适配是什么二. 重要概念讲解三.屏幕适配实战四.项目源码下载 一.屏幕适配是什么 Android中屏幕适配就是通过对尺寸单位.图片.文字.布局这四种类型的资源进行合理的设计和 ...
- Android For OpenCV的环境搭建
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类 ...
- 【转载】Sqlserver数据库备份的几种方式
在实际的数据库Sqlserver的运维的过程中,很多时候我们需要做到数据的备份操作,可以做到定时备份,也可以进行手动数据库备份.在实际的过程中,有时候因业务需要备份出完整数据库,而有时候又因为实际业务 ...
- postgreSQL 玩转josnb (长期更新)
json和jsonb的操作符 jsonb额外操作符 json创建函数 json处理函数 函数 返回类型 描述 示例 结果 json_array_length(json) jsonb_array_len ...
- 使用BCDEDIT创建BCD文件
网上找了好久,总算找到一个完全的BCD文件编辑过程的代码,分享下: ###第1步############################################################ ...
- bat脚本+diskpart 脚本实现自动划分磁盘分区
我提供的脚本只是案例展示,真实场景需要自行修改.(正好我今天看到一个规范的bat脚本,我放出来,大家一起学习下) 要求:将20G的磁盘1,分出4G为主分区,4G扩展分区(2个2G逻辑分区) 试验环境: ...
- Vault安装、配置、使用
一.环境搭建 官网指导步骤:https://learn.hashicorp.com/vault/#getting-started 1. 下载vault安装文件 2. dev环境启动 ./vault s ...
- 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质
一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...
- asp.net core导入excel
接昨天的导出 导入excel内容 对比昨天导出的内容增加了一行实体属性名称作为标题行,这样到转换为实体的时候才能找到对应的属性. 导入代码 public IActionResult InportExc ...