KendoUI之Grid的问题详解

  • KendoUI之Grid的问题详解

    • 1.kendoLov带出的值出现 null和undefined
    • 2.Grid不可编辑时,设置行背景颜色
    • 3.设置Grid某列的Title样式和列内数据样式
    • 4.修改某个字段之后 点击保存按钮没有任何效果
    • 5.检查Grid行中是否还有数据没有保存
    • 6.检查Grid选中的数据是否有脏数据
    • 7.Grid保存之后自动刷新数据,加载数据源
    • 8.Input 回车之后可以查询
    • 9.锁住grid的前两列
    • 10.设置grid列可以拖动
      • 纠错:
    • 11.Tooltip 移动到列上会显示所有数据内容
      • 1)比较丑的一种方法
      • 2)相对好看点的方法
    • 12.LOV不可编辑(比较原始的方式)
    • 13.控制Input、LOV、日期框、数字框、多选框、Grid不可编辑且变灰
    • 14.grid—toolbar—-save按钮,加上这个样式就会自动执行grid中的saveFn方法。
    • 15.Grid列开始日期、结束日期限制大小
    • 16.通过onclick传递参数
    • 17.点击按钮弹出模态框
      • 1)设置div用于显示模态框
      • 2)设置模态框的样式
      • 3)模态框指定到某个特定的html页面
    • 18.Lov带出的字段不可编辑
    • 19.Grid保存之后设置某列不可编辑
    • 20.先加载grid,再设置按钮状态
    • 21.Grid列拖拽、列选择、显示行号
    • 22.设置grid行填充颜色为红色
    • 23.设置grid行字体颜色为红色
    • 24.禁用button并移除onclick事件
    • 25.Grid的toolbar上按钮隐藏

1.kendoLov带出的值出现 null和undefined

如果数据库中数据为空,查询出来,界面上会显示null

image.png

点击新建按钮可能会出现undefined

image.png

这是因为template的问题,这样写会出错。

“ !=null ”的时候 将“ || ” 换成“ && ”

image.png
或者“ ==null ”的时候 改成“ || ”

image.png

然后就没问题了。

image.png

具体代码如下:

{field: "opeSco",title: "<@spring.message '所属经营范围'/>",width: 150,attributes: {style: "text-align:center"},headerAttributes: {"class": "table-header-cell",style: "text-align: center"},template:function(item){if(item.meaning==null || item.meaning==""){return "";}return item.meaning;},editor: function (container, options) {$('<input name="' + options.field + '"/>').appendTo(container).kendoLov({code: "CUS__MANSCOPE_CATEGORYCODE",contextPath: '${base.contextPath}',locale: '${base.locale}',textField: 'meaning',select: function (e) {options.model.set('opeSco',e.item.value);options.model.set('meaning',e.item.meaning);},query:function(e){if (options.model.medType != null) {e.param['propertyCode'] = options.model.medType;}},clearButton:true});}
},​```

2.Grid不可编辑时,设置行背景颜色

tr[data-uid=dataItem.uid] 可以定位Grid的某一行。

//控制背景颜色
{hidden: true,template: function (dataItem) {var uid = dataItem.uid;if (dataItem.statusCode == "SUBMITTED") {setTimeout(function () {$("tr[data-uid=" + uid + "]").css("background", "#EBEBEB");}, 0);}}
},

image.png

3.设置Grid某列的Title样式和列内数据样式

//列标题居中
headerAttributes: {"class": "table-header-cell",style: "text-align: center;"
},//列数据居左
attributes: {style: "text-align:left;"}, //列数据过长时,不换行,简略为 " ... "
attributes: {style: "white-space:nowrap;text-overflow:ellipsis;"},

image.png

4.修改某个字段之后 点击保存按钮没有任何效果

原因: __status = ’ ‘

HAP框架判断界面是新增还是修改或者是删除,都是通过“ __status ”。如果没有值,controller是不会操作数据的。

新建: __status = ‘add ‘

更新: __status = ‘update ‘

删除: __status = ‘delete ‘

如果“ __status ”实在是没有值,可以手动设置值。 viewModel.model.set(’ __status’, ‘add’);

image.png

5.检查Grid行中是否还有数据没有保存

使用dataSource.hasChanges() 方法。

if(!dataSource1.hasChanges()){kendo.ui.showInfoDialog({message: '还有未保存的数据,请先保存!'});
}else{window.top.closeTab("GMI_EDIT"+basicId);
}

6.检查Grid选中的数据是否有脏数据

删除数据时,需要判断选中的数据是否是脏数据(即未保存的数据)

$(“#Grid”).data(“kendoGrid”).selectedDataItems()[i].dirty

//删除数据
function deleteData() {var grid = $("#Grid").data("kendoGrid");var checked = grid.selectedDataItems(); //获得选中的数据行if (checked.length == 0) {kendo.ui.showInfoDialog({message: "请至少选择一行"})} else {var dirtyArr = [];var statusCodeArr = [];for (var i = 0; i < checked.length; i++) {dirtyArr.push(checked[i].dirty || checked[i].organizationId == "");statusCodeArr.push(checked[i].statusCode);}if (dirtyArr.indexOf(true) != -1) {//存在未保存的数据kendo.ui.showInfoDialog({message: '请先保存该数据'});} else if (statusCodeArr.indexOf("ALTER") != -1 || statusCodeArr.indexOf("REJECTED") != -1 || statusCodeArr.indexOf("APPROVED") != -1 || statusCodeArr.indexOf("SUBMITTED") != -1 || statusCodeArr.indexOf("REVOKED") != -1) {//存在非新建状态的数据kendo.ui.showInfoDialog({message: '非新建状态不能删除'});} else {Hap.deleteGridSelection({grid: $('#Grid')});}}}

image.png

7.Grid保存之后自动刷新数据,加载数据源

$(‘#grid1’).data(‘kendoGrid’).dataSource.page(1);

或者

$(‘#grid’).data(‘kendoGrid’).dataSource.read();

saveFunction:function () {$('#grid1').data('kendoGrid').saveChanges().done(function(e){if(e.response.success){viewModel.set("model.statusCode","ALTER");$("#submit-btn").removeAttr("disabled").on("click",function () {viewModel.submitData();});$('#grid1').data('kendoGrid').dataSource.page(1); //刷新数据}});
},

8.Input 回车之后可以查询

/* 回车键绑定查询按钮 */
$('#query-form input').keydown(function (e) {if (e.keyCode == 13) {e.target.blur();viewModel.queryResource(e);}
});      

9.锁住grid的前两列

locked:true

{
field:'ruleCode',
title: '<@spring.message "gxpvalidrule.rulecode"/>',
width:'100px',
locked:true //锁住前两列},

image.png

10.设置grid列可以拖动

reorderable:true,

纠错:

resizable: true,
scrollable: true,

11.Tooltip 移动到列上会显示所有数据内容

当行数据过长,超出的数据变为“ … ” 。鼠标移动到单元格上,会把行中的所有数据呈现出来。

有以下两种方式:

1)比较丑的一种方法
$("#Grid").kendoTooltip({show: function(e){if(this.content.text().length > 20){this.content.parent().css("visibility", "visible");}},hide:function(e){this.content.parent().css("visibility", "hidden");},filter: "td:nth-child(10)", //this filter selects the first column cellsposition: "center",content: function(e){var dataItem = $("#Grid").data("kendoGrid").dataItem(e.target.closest("tr"));var content = dataItem.errorMsg;return content;}}).data("kendoTooltip");

image.png

2)相对好看点的方法

a. 首先设置样式

<!--设置tooltip的样式-->
<style>div[role=tooltip].k-tooltip{padding:2px;background:#5c9acf;}.k-tooltip-content{padding:4px;text-align:left;background:#fff;color:#666;}.k-callout {border-bottom-color:#5c9acf;}
</style>

b.设置数据显示的样式

//数据太长不换行,移动到上边的时候显示框
attributes:{style: "white-space:nowrap;text-overflow:ellipsis;"},

image.png

c.添加Tooltip

//add tooltip
$("#Grid").kendoTooltip({show: function(e){if($.trim(this.content.text()) !=""){$('[role="tooltip"]').css("visibility", "visible");}},hide: function(){$('[role="tooltip"]').css("visibility", "hidden");},filter: "td:nth-child(n+3)",content: function(e){var element = e.target[0];if(element.offsetWidth < element.scrollWidth){var text = $(e.target).text();return '<div style="min-width:100px;max-width: 1000px;">' + text + '</div>';}else{$('[role="tooltip"]').css("visibility", "hidden");//解决鼠标一开始放在上面出现空模块return "";}}
}).data("kendoTooltip");

image.png

备注:使用Tooltip会出现一个问题,如果行上出现复选框,复选框很难选中。

解决方法:把复选框放到最左或者最右

最左,修改n+3中的“ 3 ” ,以达到想要的效果

最右,过滤掉最后一列:filter: “td:nth-child(n+3) :not-last-child”,

12.LOV不可编辑(比较原始的方式)

image.png

13.控制Input、LOV、日期框、数字框、多选框、Grid不可编辑且变灰

$("#templateName").attr("readonly",true).css("background", "#EEEEEE");
$('#end-date').attr('disabled',true).data('kendoDatePicker').enable(false);
$('#qualifyType').attr('disabled',true).data('kendoLov').enable(false);
$('#warningLeadTime').attr('disabled',true).data('kendoNumericTextBox').enable(false);
$("#enableFlag").data("kendoCheckbox").enable(false);

image.png

image.png

//设置grid不可编辑
$("#Grid").data("kendoGrid").setOptions({editable: false});
//设置grid自适应界面显示,否则grid中只能看到一条数据
$("#Grid").data("kendoGrid").autoResize();

image.png

14.grid—toolbar—-save按钮,加上这个样式就会自动执行grid中的saveFn方法。

image.png

15.Grid列开始日期、结束日期限制大小

{field: "startDate",title: '开始时间',headerAttributes: {"class": "table-header-cell",style: "text-align: center"},attributes:{style: "white-space:nowrap;text-overflow:ellipsis;"},width: 120,format: "{0:yyyy-MM-dd}",editor: function(container, options) {var end = options.model.endDate;var d;if(end){d=end;}$('<input name="' + options.field + '"/>').appendTo(container).kendoDatePicker({format:"yyyy-MM-dd",max:d,change:function(){if(this.value()!=null){d = this.value();}else{d= new Date(1900, 0, 1, 22, 0, 0);}}});}},{field: "endDate",title: '结束时间',headerAttributes: {"class": "table-header-cell",style: "text-align: center"},attributes:{style: "white-space:nowrap;text-overflow:ellipsis;"},width: 120,format: "{0:yyyy-MM-dd}",editor: function(container, options) {var start = options.model.startDate;var d;if(start){d=start;}$('<input name="' + options.field + '"/>').appendTo(container).kendoDatePicker({format:"yyyy-MM-dd",min:d,change:function(){if(this.value()!=null){d = this.value();}else{d= new Date(2099, 0, 1, 22, 0, 0);}}});}},

16.通过onclick传递参数

传递非字符串时:”+item.basicId+”

传递字符串参数时: \”“+item.candidateRuleCode+”\” 用双引号将参数包围,同时使用转义符。

//传递int  int  string
return "<button class='btn btn-primary' onclick='detail("+item.basicId+","+item.lineId+",\""+item.candidateRuleCode+"\")'>分配明细</button>"

17.点击按钮弹出模态框

1)设置div用于显示模态框
<div id="win1"></div>
2)设置模态框的样式
$("#win1").kendoWindow({width: "600px",height:"400px",title: '<@spring.message "指定人"/>',modal:true,resizable: true,visible:false,iframe:true
});
3)模态框指定到某个特定的html页面
var userWin = $("#win1").data("kendoWindow");
userWin.refresh('wfl_config_user.html?basicId='+basicId+'&lineId='+lineId);
if(parent.autoResizeIframe){parent.autoResizeIframe('${RequestParameters.functionCode!}', 500, function(){userWin.center().open();})
}else {userWin.center().open();
}

image.png

18.Lov带出的字段不可编辑

container.removeClass(‘k-edit-cell’); 删除单元格的编辑类

{
field: "wflName",
title: '工作流名称',
width: 180,
editor: function(container, options){container.html(options.model.wflName);container.removeClass('k-edit-cell');
}

19.Grid保存之后设置某列不可编辑

editable:function(col,item){if(col=="ruleCode"){if(this.basicId != "" && this.basicId != null){ //避免新建的时候也不可编辑return false;}}return true;
}

20.先加载grid,再设置按钮状态

image.png

21.Grid列拖拽、列选择、显示行号

reorderable:true,       //用于列拖拽columnMenu: true,       //用于列选择rownumber:true,         //用于显示行号

22.设置grid行填充颜色为红色

        //css样式类<style>.grid-red{background:#FF0000;}</style>dataBound: function (e) {//设置字体颜色$.each(dataSource.data(), function (i, v) {if(v.billAmount < 0) {$('tbody > tr[data-uid="' + v.uid + '"] > td').attr("class", "grid-red");}})},

image.png

23.设置grid行字体颜色为红色

        dataBound: function (e) {//设置字体颜色$.each(dataSource.data(), function (i, v) {if(v.billAmount < 0) {$('tbody > tr[data-uid="' + v.uid + '"] > td').css("color","red");}})},

image.png

24.禁用button并移除onclick事件

//当查询字段“核对状态”限制为已核对时,将“自动核对”按钮置灰,不可点击function disableAutoSettlementBtn(a){if($("#flowStatus").val() == 'CHECKED'){$("#btn_auto_settlement").attr("disabled", "disabled").unbind();$("#btn_auto_settlement").removeAttr("onclick");}else{$("#btn_auto_settlement").removeAttr("disabled").on("click", function () {autoSettlement();});}}

25.Grid的toolbar上按钮隐藏

当编辑或者新建grid时,toolbar上按钮显示并且可以点击

toolbar: [{template :'<span  id="btn_add" class="span-btn-size span-span" data-bind="click:createFunction"><img alt="" src="${base.contextPath}/resources/image/new.png" /><a ><@spring.message "hap.new"/></a></span>' +'<span  id="btn_delete" class="span-btn-size span-span" onclick="deleteData()"><img alt="" src="${base.contextPath}/resources/image/delete.png" /><a ><@spring.message "hap.delete"/></a></span>',}],

隐藏按钮:

$("#Grid").data("kendoGrid").setOptions({toolbar: null
});

image.png

KendoUI之Grid的问题详解相关推荐

  1. grid栅格布局详解

    grid栅格布局 一.概述 二.grid布局的基本内容 1.术语 2.定义 3.grid-template-columns 属性,grid-template-rows 属性 4.cloumn-gap, ...

  2. WPF 控件专题 Grid 控件详解

    1.Grid 介绍 定义由列和行组成的灵活的网格区域,Grid顾名思义就是"网格",它的子控件被放在一个一个实现定义好的小格子里面,整齐配列,该对象可包含多个 Children对象 ...

  3. CSS Grid网格布局详解

    Grid 布局又称网格布局,是W3C提出的一个二维布局系统,它与 Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置.但是,它们也存在重大区别.Flex 布局是轴线布局,只能指定" ...

  4. column属性 extjs_Ext.grid.ColumnModel 属性 详解

    Ext.grid.ColumnModel 用于定义 Grid 的列 用例 var colModel = new Ext.grid.ColumnModel([ {header: "Ticker ...

  5. CSS Grid 网格布局详解

    目录 一:Grid简介 二:基本概念 2.1 容器和项目 2.2 行和列 2.3 单元格 2.4 网格线 三:容器属性 3.1 display 属性 3.2.grid-template-columns ...

  6. python grid函数_详解numpy中的meshgrid函数用法

    numpy中的meshgrid函数的使用 numpy官方文档meshgrid函数帮助文档https://docs.scipy.org/doc/numpy/reference/generated/num ...

  7. Python Tkinter模块详解(后续持续补充)

    声明:该文章是个人学习中写的,目的是总结及当作工具参考,有一定的借鉴成分,后续若有新发现则补充 目录 Tkinter简介 创建组件基本语法 Tkinter组件汇总 Variable 类 常见参数详解 ...

  8. python布局管理_Python基础=== Tkinter Grid布局管理器详解

    本文转自:https://www.cnblogs.com/ruo-li-suo-yi/p/7425307.html          @ 箬笠蓑衣 Grid(网格)布局管理器会将控件放置到一个二维的表 ...

  9. grid layout网格布局详解

    grid layout网格布局详解 什么是grid layout grid的特点 grid css属性的基础知识 创建一个grid布局 创建一个网格 隐性网格与显性网格 尺寸单位fr repeat函数 ...

最新文章

  1. Realm 使用的简单教程
  2. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)
  3. 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 二 NSMutableString
  4. wegame一键蹲替换文件_iPhone 提示音一键替换,极简教程
  5. 【Alljoyn】Alljoyn学习笔记五 AllJoyn开源技术基础概念解析
  6. RequestBody注解
  7. linux启动mysql_Linux服务器安装Mysql教程
  8. c++面向对象高级编程 学习十一 类模板、函数模板、成员模板
  9. EMC标准与测试方法
  10. OpenCore引导配置说明0.6.9版-基于OpenCore-0.6.9-05-04正式版
  11. 系统的x86与x64是什么意思以及他们的区别?
  12. JSR303 数据效验
  13. Hive中如何统计用户三个月或者以上的行为数据
  14. 引起内存不能“read”的原因及“written”的解决方案
  15. seata(二) 分布式事务框架seata1.3 AT及XA模式实例演示
  16. 大数据行业就业指南:三大方向 十大职位
  17. Python--初识庐山真面目
  18. 魔兽世界8.0哪个服务器稳定,魔兽世界8.0国服开服了!为了不落后!这九件事急需了解掌握...
  19. CSS去掉链接下划线的方法
  20. 电磁场与仿真软件(13)

热门文章

  1. html c 标签 if 判断是否为空
  2. python3面向对象编程第二版pdf_Python 3 面向对象编程(第2版)
  3. 邓仰东专栏|机器学习的那些事儿(五):基于GPU的机器学习实例之IBM Waston
  4. 智能相机(Smart Camera)
  5. 自定义字体与iconfont字体图标
  6. Android音乐播放器开发的MediaPlayer出现IllegalStateException
  7. 红外线遥控器解码原理
  8. Linux安装MySql8.0详细教程
  9. 人工智能初创公司创办过程中的三个关键教训
  10. Linux shell简单创建用户脚本