免费的 jqGrid。获取与单元格相关的列名

Free jqGrid. Getting column names in conjunction with a cell

我正在尝试使用描述行中未填充哪些单元格的错误输出来实施数据完整性检查。

//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 {

也就是说,似乎一切正常,但是当您更改列数时,一切都会付诸东流。我怎样才能 link 将列名称更改为 ColNames 及其在 ColModel 中的名称以获得动态解决方案?

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

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

要通过列名获取列索引,可以遍历 colModel 数组并测试 name 属性 的值。为了speed-up这样的操作免费jqGrid提供了映射objectiColByName作为jqGrid的选项。因此,如果您知道列名 cmName,那么您可以使用 var iCol = p.iColByName[cmName]; 来获取列索引。 colModel 中的列将是 p.colModel[iCol],列 header 中的文本将是 p.colNames[iCol]

顺便说一句,我不确定您是否正确理解 colNames 的值。参数的名字起的不好,但是为了兼容老版本,还是会用的。数组colNames的元素是HTML个片段,将放在header列中。可以在 colNames 中包含空字符串,也可以在不同的列中包含相同的 header。另一方面,colModelname 属性 是列的真实 name。它不能为空。不能在不同的列中使用重复的名称,并且名称中不能包含空格。

我希望有了以上信息,您将能够轻松找到关于每一列的完整信息。

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