免费jqGrid。将列名与单元格

时间:2017-04-14 07:52:53

标签: jqgrid free-jqgrid

我正在尝试使用错误输出实现数据充实性检查,该错误输出描述了行中未填充的单元格。

//get row id
var gr = $("#" + subgrid_table_id).jqGrid('getGridParam', 'selrow');
// check row select
if (gr != null) {
/*
var myGrid = $("#" + subgrid_table_id),
selRowId = myGrid.jqGrid('getGridParam', 'selrow'),
//get cell value:
col1Value = myGrid.jqGrid('getCell', selRowId, 'stage');
//get all colnames
var columnNames =  myGrid.jqGrid('getGridParam','colNames');
//get column name by index:
var col1Name = columnNames[4];

if (col1Value == "")    {
    alert("This data is empty: "+col1Name);
}
else {

也就是说,一切似乎都有效,但是当你改变列数时,一切都会浪费掉。如何将列名称与ColNames的名称在ColModel中链接以获得动态解决方案?

1 个答案:

答案 0 :(得分:0)

首先,jqGrid的所有参数都保存在myGrid.jqGrid('getGridParam')可用的一个对象中。因此var selRowId = myGrid.jqGrid('getGridParam', 'selrow');p.selrow相同,其中var p = myGrid.jqGrid('getGridParam');

列将由colModelp.colModel[iCol]中的索引标识。另一方面,列的name属性将更频繁地被称为列iCol的索引。此外,存在通过拖放列标题对列重新排序的可能性。需要包括网格的sortable: true选项以实现可能性。可以通过columnChooser或直接调用方法remapColumnsremapColumnsByName来更改列顺序。由于所有原因,建议保存列名(永远不会更改)而不是列索引。

要按列名获取列索引,可以循环遍历colModel数组并测试name属性的值。为了加速这种操作,免费的jqGrid提供了地图对象iColByName作为jqGrid的选项。因此,如果您知道列名cmName,则可以使用var iCol = p.iColByName[cmName];来获取列索引。 colModel中的列将为p.colModel[iCol],列标题的文本将为p.colNames[iCol]

顺便说一句,我不确定您是否正确理解colNames的价值。参数的名称不好,但由于与旧版本的兼容性,因此将使用它。数组colNames的元素是HTML片段,它们将放在列标题中。可以在colNames内部使用空字符串,或者为不同的列使用相同的标题。另一方面,name的{​​{1}}属性是列的真实名称。它不可能是空的。一个人不能在不同的列中使用重复的名称,名称不能包含空格。

我希望通过上述信息,您可以轻松找到有关每列的完整信息。

最后的评论。有三种主要方法可用于获取网格数据:colModelgetCellgetRowData。 jqGrid获取输入数据,格式化数据并将格式化的HTML片段放在单元格中(在getLocalRow中)。另外,jqGrid将原始原始数据保存在内部<td>参数中(这是项目数组,表示行)。 data参数仅在使用本地数据(data)的情况下存在,或者在从远程集(datatype: "local"datatype: "json")加载数据的情况下存在,但datatype: "xml"参数存在loadonce: true参数另外还有1}}选项。方法getCellgetRowData 取消格式化来自单元格的数据(来自<td>),方法getLocalRow可让您直接引用来自内部data的内部JavaScript对象,其中已设置行的数据。因此,只要网格具有本地数据,建议您更喜欢使用getLocalRow而不是getCellgetRowData