Javascript JqGrid保留网格参数并检索它-无法设置它

Javascript JqGrid保留网格参数并检索它-无法设置它,javascript,jquery,json,jqgrid,Javascript,Jquery,Json,Jqgrid,我有一个jqGrid,我试图让用户选择保存自己的视图。这些视图与所有参数一起存储在数据库中。我有大约30列,因此不可能在一个页面中容纳整个网格,因此我提供了移动行、调整宽度等选项,然后能够保存参数 为此,我有这个代码来保存数据库中的整个网格 var saveLayoutDialog = "<div title='Save Layout'>"+ "<label style='width: 100%; !important;'>Name the layout&

我有一个jqGrid,我试图让用户选择保存自己的视图。这些视图与所有参数一起存储在数据库中。我有大约30列,因此不可能在一个页面中容纳整个网格,因此我提供了移动行、调整宽度等选项,然后能够保存参数

为此,我有这个代码来保存数据库中的整个网格

var saveLayoutDialog =
    "<div title='Save Layout'>"+
    "<label style='width: 100%; !important;'>Name the layout</label></br>" +
    "<input type='text' name='nameOfLayout' id='nameOfLayout' placeholder='Name of Layout' style='width: 100%; !important;'>" +
    "</div>";
$(saveLayoutDialog).dialog({
    modal: true,
    buttons: {
        'OK': function () {
            $.ajax({
                type: 'POST',
                url: Routing.generate('save_grid_parameters_homepage', { gridName: 'PODetail' }) ,
                data: {
                    'layoutName': $("#nameOfLayout").val(),
                    'gridData': JSON.stringify($("#list").getGridParam())
                },
                success: function(data){
                    if(data.success == 'success')
                    {
                    }
                    else if(data.success == 'fail')
                    {
                    }
                }
            });
            $(this).dialog('close');
        },
        'CANCEL': function () {
            $(this).dialog('close');
        }
    }
});
var saveLayoutDialog=
""+
“命名布局
”+ "" + ""; $(saveLayoutDialog).对话框({ 莫代尔:是的, 按钮:{ “确定”:函数(){ $.ajax({ 键入:“POST”, url:Routing.generate('save_grid_parameters_homepage',{gridName:'PODetail'}), 数据:{ '布局名称':$(“#布局名称”).val(), 'gridData':JSON.stringify($(“#列表”).getGridParam() }, 成功:功能(数据){ 如果(data.success==“success”) { } else if(data.success==“fail”) { } } }); $(this.dialog('close'); }, “取消”:函数(){ $(this.dialog('close'); } } });
这是工作良好,我能够保存在数据库的数据

在网格上我有一个按钮来改变布局的设计。因此,当用户单击按钮时,将显示可用的布局(以前保存在dB中),用户可以选择一个布局,网格的设计将相应地更改

这是按钮的代码:

.navButtonAdd("#pager",{
    id: "changeDesign",
    caption:"Change Design",
    onClickButton: function(){
        var htmlForPopup = "<div id='changeDesign' title='Change Design'>"+
            "<label style='width: 100%; !important;'>SELECT A DESIGN</label>" +
            "<div class='radio'>";

        $.ajax({
            url: Routing.generate('get_grid_layouts_homepage', { gridName: 'PODetail' }),
            success: function(data){
                $.each (data, function (bb) {
                    htmlForPopup +=
                        "<input type='radio' name='gridLayouts' id='"+data[bb].layoutName+"' value='"+data[bb].gridData+"' style='width: 20%; !important;'>"+data[bb].layoutName+"</br>";
                });
                htmlForPopup += "</div></div>";
                $(htmlForPopup).dialog({
                    modal: true,
                    buttons: {
                        'OK': function() {
                            //console.log(JSON.parse($('input[name=gridLayouts]:checked').val()));
                            $("#list").setGridParam(JSON.parse($('input[name=gridLayouts]:checked').val())).trigger("reloadGrid");
                            $(this).dialog('close');
                        }
                    }
                });
            }
        });
    }
});
.navbuttonad(#寻呼机){
id:“变更设计”,
标题:“改变设计”,
onClickButton:function(){
var htmlForPopup=“”+
“选择设计”+
"";
$.ajax({
url:Routing.generate('get\u grid\u layouts\u homepage',{gridName:'PODetail'}),
成功:功能(数据){
$。每个(数据、功能(bb){
HTMLFORPOUP+=
“+data[bb].布局名称+”
”; }); htmlForPopup+=“”; $(htmlForPopup).对话框({ 莫代尔:是的, 按钮:{ “确定”:函数(){ //log(JSON.parse($('input[name=gridLayouts]:checked').val()); $(“#list”).setGridParam(JSON.parse($('input[name=gridLayouts]:checked').val()).trigger(“reloadGrid”); $(this.dialog('close'); } } }); } }); } });
问题:所需设备工作不正常。行没有移动,列数据也没有正确显示

示例: 这是默认情况下加载的理想网格。 这是单击上面显示的按钮代码时显示的弹出窗口。

单击其中一个选项,理想情况下,
折扣
列和
成本
列也应使用各自的数据切换其头寸。但这并没有发生,而是发生了: 折扣和成本列的数据正在切换,但标题本身没有切换。同样在
成本
下(理想情况下应该有
折扣
列的数据转换为
NaN
(我假设这是因为数据类型不匹配)

我做错了什么

编辑1:jqGrid版本4.8.2,如果需要完整的jqGrid,请告诉我,我将用代码更新问题


编辑2:工作

使用一个参数调用
setGridParam
:从
$('input[name=gridLayouts]:checked')获得的值。val()
。然后调用
reloadGrid
,只重新加载数据,而不重新加载jqGrid的许多其他选项。要在网格外部进行一些更改,必须使用相应的jqGrid方法。例如,您必须使用
remapColumns
或更好的
remapColumnsByName
来切换columns(例如“折扣”和“成本”列)。同样,您需要使用
showCol
/
hideCol
方法来显示/隐藏网格的一列,以此类推。jqGrid参数的某些更改需要重新创建网格

我建议您尝试我为其创建的网格。演示显示了如何在web浏览器的
localStorage
中保存网格状态。尝试在演示中对列重新排序,隐藏一些列,更改排序顺序,选择一行,然后使用F5重新加载页面(重新打开同一页面)。这不完全是您所做的,但大多数技术问题都是相同的。我希望这将有助于您实现您的要求


另外,再次感谢您在中的错误报告。我已发布到GitHub。

对不起,如果您对jqGrid有问题,那么您应该包括创建它的JavaScript代码以及用于填充网格的测试数据。与jqGrid相关的唯一代码行是
$(“#list”).setGridParam(JSON.parse($('input[name=gridLayouts]:checked').val()).trigger(“reloadGrid”);
,但这是错误的。您可以使用一个参数调用
setGridParam
$(“#list”).setGridParam(oneParam)
不要使用两个参数:参数名和参数值。最有效的方法是准备演示问题的演示。@Oleg抱歉,我将用一把小提琴更新问题。您可能可以查看,或者。答案显示了如何重新加载网格(在重新加载页面的示例中)使用先前保存的网格状态(选定行、页码