免费jqGrid。与单元格一起获取列名

问题描述:

我试图用一个错误输出来实现数据完整性检查,该输出描述哪些单元格未被填充到行中。免费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 { 

也就是说,一切似乎都奏效,但是当您更改列数时,一切都可能会浪费。如何将列名与ColMames中的名称链接起来以获得动态解决方案?

首先将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或通过直接调用方法remapColumnsremapColumnsByName来更改。由于所有的原因,建议保存列的名称(永远不会更改),而不是列索引。

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

顺便说一下,我不确定您是否正确理解colNames的值。该参数的名称不好,但会因与旧版本的兼容性而被使用。数组colNames的元素是HTML片段,将放置在列标题中。可以在colNames之内有空字符串,或者对于不同的列有相同的标题。另一方面,colModelname属性是该列的真实名称。它不能为空。不能在不同列中使用重复名称,并且名称不能包含空格。

我希望拥有上述信息,您将很容易找到关于每一列的完整信息。

最后一句话。有三种主要方法可用于获取网格数据:getCell,getRowDatagetLocalRow。 jqGrid获取输入数据,格式化数据并将格式化的HTML片段放入单元格中(在<td>中)。此外,jqGrid将原始原始数据保存在内部data参数(这是项目数组,表示行)中。 data参数仅在使用本地数据(datatype: "local")的情况下或者在从远程设置(datatype: "json"datatype: "xml")加载数据的情况下存在,但是另外使用loadonce: true选项。 getLocalRow让你从内data,在该行的数据已设置直接引用内部JavaScript对象的方法getCellgetRowDataunformats从细胞(S)(从<td>)的数据和方法。因此,只要网格具有本地数据,建议使用getLocalRow而不是getCellgetRowData