EasyUI行数据如何通过列索引而非字段获取列值及空值处理
我来帮你搞定这两个EasyUI的问题:
问题1:通过列索引而非字段名获取行数据对应值
EasyUI的datagrid行数据(rowdata)是通过字段名(field)来存储的,没法直接用索引拿到对应值,但我们可以绕个弯:先通过列索引拿到该列的字段名,再用字段名去取行数据的值。具体步骤如下:
- 获取目标
datagrid的列配置数组 - 通过列索引提取对应列的
field属性 - 用这个
field去访问rowdata的对应属性值
示例代码:
// 替换成你的datagrid实际ID var datagrid = $('#your-datagrid'); // 获取列配置(单级列取columns[0]即可,多级列需根据层级调整) var columns = datagrid.datagrid('options').columns[0]; // 假设要获取第2列(索引从0开始)对应行的数据 var targetRow = datagrid.datagrid('getSelected'); // 或者你已有的rowdata变量 var targetField = columns[1].field; var columnValue = targetRow[targetField];
这样就能通过列索引间接拿到行数据里对应列的值啦。
问题2:指标名称为空时不显示运算值的0
你需要给动态生成的“运算值”列添加formatter格式化函数,在渲染单元格时判断对应的指标名称是否为空,为空就返回空字符串,替代默认显示的0。修改你的代码如下:
// 生成指标名称列(你的原有代码) first[12+4*i]['field'] = 'fxzb'+(i+1)+'_mc'; first[12+4*i]['title'] = '指标'+(i+1)+'名称'; first[12+4*i]['align'] = 'center'; first[12+4*i]['width'] = 150; // 生成运算值列,添加格式化逻辑 first[13+4*i] = {}; // 建议用对象字面量替代new Array(),写法更规范 first[13+4*i]['field'] = 'fxzb'+(i+1)+'_ysz'; first[13+4*i]['title'] = '指标'+(i+1)+'运算值'; first[13+4*i]['align'] = 'center'; // 核心:添加formatter函数控制显示 first[13+4*i]['formatter'] = function(value, row, index) { // 获取当前运算值对应的指标名称字段 var nameField = 'fxzb'+(i+1)+'_mc'; // 判断指标名称是否为空(包含空字符串和纯空格的情况) if (!row[nameField] || row[nameField].trim() === '') { return ''; // 为空时返回空,不显示0 } // 指标名称不为空时,返回原值(若value为0则正常显示) return value === undefined ? '' : value; };
小提醒:用{}对象字面量创建列配置,比new Array()更符合JavaScript的编码习惯,也能避免一些潜在问题。
内容的提问来源于stack exchange,提问作者Emm
相关产品推荐
相关产品推荐

