我正在尝试使用错误输出实现数据充实性检查,该错误输出描述了行中未填充的单元格。
//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中链接以获得动态解决方案?
答案 0 :(得分:0)
首先,jqGrid的所有参数都保存在myGrid.jqGrid('getGridParam')
可用的一个对象中。因此var selRowId = myGrid.jqGrid('getGridParam', 'selrow');
与p.selrow
相同,其中var p = myGrid.jqGrid('getGridParam');
。
列将由colModel
:p.colModel[iCol]
中的索引标识。另一方面,列的name
属性将更频繁地被称为列iCol
的索引。此外,存在通过拖放列标题对列重新排序的可能性。需要包括网格的sortable: true
选项以实现可能性。可以通过columnChooser
或直接调用方法remapColumns
或remapColumnsByName
来更改列顺序。由于所有原因,建议保存列名(永远不会更改)而不是列索引。
要按列名获取列索引,可以循环遍历colModel
数组并测试name
属性的值。为了加速这种操作,免费的jqGrid提供了地图对象iColByName
作为jqGrid的选项。因此,如果您知道列名cmName
,则可以使用var iCol = p.iColByName[cmName];
来获取列索引。 colModel
中的列将为p.colModel[iCol]
,列标题的文本将为p.colNames[iCol]
。
顺便说一句,我不确定您是否正确理解colNames
的价值。参数的名称不好,但由于与旧版本的兼容性,因此将使用它。数组colNames
的元素是HTML片段,它们将放在列标题中。可以在colNames
内部使用空字符串,或者为不同的列使用相同的标题。另一方面,name
的{{1}}属性是列的真实名称。它不可能是空的。一个人不能在不同的列中使用重复的名称,名称不能包含空格。
我希望通过上述信息,您可以轻松找到有关每列的完整信息。
最后的评论。有三种主要方法可用于获取网格数据:colModel
,getCell
和getRowData
。 jqGrid获取输入数据,格式化数据并将格式化的HTML片段放在单元格中(在getLocalRow
中)。另外,jqGrid将原始原始数据保存在内部<td>
参数中(这是项目数组,表示行)。 data
参数仅在使用本地数据(data
)的情况下存在,或者在从远程集(datatype: "local"
或datatype: "json"
)加载数据的情况下存在,但datatype: "xml"
参数存在loadonce: true
参数另外还有1}}选项。方法getCell
和getRowData
取消格式化来自单元格的数据(来自<td>
),方法getLocalRow
可让您直接引用来自内部data
的内部JavaScript对象,其中已设置行的数据。因此,只要网格具有本地数据,建议您更喜欢使用getLocalRow
而不是getCell
或getRowData
。