我的HTML頁面上有2個網格。 當我單擊一個網格中的一行時,它需要根據所選行將數據加載到另一個網格中。(jqGrid)向服務器發送額外的自定義參數
所以我需要發送的ROWID作爲第二電網的額外參數..不能弄清楚如何..
(我寧可不喜歡用子網格功能)
我的HTML頁面上有2個網格。 當我單擊一個網格中的一行時,它需要根據所選行將數據加載到另一個網格中。(jqGrid)向服務器發送額外的自定義參數
所以我需要發送的ROWID作爲第二電網的額外參數..不能弄清楚如何..
(我寧可不喜歡用子網格功能)
如果選擇「高級」,然後選擇「主細節」,則可以在http://trirand.com/blog/jqgrid/jqgrid.html上找到此方案的示例。我在代碼的一個小的變體下面包括。
讓我們在HTML頁面上有兩個網格:一個「主」網格和另一個「細節」網格,它需要根據選定到主網格中的行加載數據。讓我們這兩個網格必須填充從JSON格式發回數據的服務器的數據。我們假設,我們在主網格中使用單行選擇(沒有定義multiselect: true
)。
下面是代碼模板
var detailsTitle = 'Details';
var grid = jQuery('#master').jqGrid({ // ... some parameters
url: masaterUrl,
datatype: 'json',
colModel: [ // ... some column definitions
{ name: 'Name', width: 120 }
],
onSelectRow: function(id) {
var selName = grid.getCell(id, 'Name');
gridDetails.setCaption(detailsTitle + ' for "' + selName + '"');
gridDetails.setGridParam({
//url: urlGetDetail + '/' + encodeURIComponent(id),
//url: urlGetDetail + '?' + $.param({ userId: id });
postData: { userId: id },
page: 1,
datatype: 'json' }).trigger('reloadGrid');
}
}).navGrid('#pager', {}, {}, {}, {
afterSubmit: function(response, postdata) {
gridDetails.setCaption(detailsTitle);
gridDetails.setGridParam({ datatype: 'local',
page: 1 }).trigger('reloadGrid');
return [true, ''];
}
});
var gridDetails = jQuery('#detail').jqGrid({ // ...
caption: detailsTitle,
url: urlDetail,
//postData: { userId: function() { return grid.getGridParam('selrow'); } },
datatype: 'local'
});
現在一些對代碼的註釋。在開始時,主柵格中不會選擇行。因此,我們將datatype: 'local'
設置爲拒絕和數據加載的細節網格參數。
如果將選擇主柵格中的一行,我們設置細節柵格的標題(標題),將細節柵格的datatype
更改爲'json'
並將page: 1
設置爲page: 1
。重置page
參數很重要,因爲它將作爲附加參數發送到服務器。如果在最後一次選擇時用戶選擇了另一個頁面,並且對於新選擇,那麼沒有那麼多的datails行可以清空細節網格。要解決這個問題,我們應該始終將page
設置爲1.
現在主要工作:發送主網格的id
作爲服務器請求的詳細網格的參數。我們在這裏有一些選項:
'?userId='+id
之後附加細節網格的網址。要更仔細地做到這一點,我們應該考慮到id
可以有一些特殊字符。所以要確定我們應該使用'?userId='+encodeURIComponent(id)
。功能jQuery.param
以更具可讀性的形式進行。所以我們可以用'?'+jQuery.param({userId:id})
代替。如果細節網格的url
應該採用REST格式(如「blabla/id」),我建議使用這種方式。在這種情況下,將細節網格的url
設置爲urlDetail+'/'+encodeURIComponent(id)
可能是最好的方法。postData:{userId:id}
。如果我們對服務器的請求使用HTTP GET,那麼跟'?'+jQuery.param({userId:id})
一樣。這種方式的優點是我們也使用HTTP POST。然後,這些參數將被髮布到主體中,而不是附加到URL中。所以使用postData
有一個小優點。onSelectRow
事件中刪除代碼,並在細節網格中包含作爲函數的附加參數postData
(請參見注釋行)。除少數例外情況外,這種方式非常有效。例如,如果主網格中的選定行將被刪除,我們將很難清除詳細信息網格。在其他一些情況下,我們也缺乏靈活性。所以我只想提到這種可能性,但我只是將它作爲評論加入(如果您對此有興趣,請參見How to filter the jqGrid data NOT using the built in search/filter box)。