2017-04-14 174 views
1

我試圖用一個錯誤輸出來實現數據完整性檢查,該輸出描述哪些單元格未被填充到行中。免費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中的名稱鏈接起來以獲得動態解決方案?

回答

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或通過直接調用方法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