jqGrid setSelection没有突出显示行onload

时间:2016-03-04 00:00:51

标签: jquery jqgrid jqgrid-asp.net

我正在传递MVC模型进行查看,使用ID填充隐藏字段,然后我需要相应的行突出显示以显示选择。

我已经以各种方式尝试setSelection,没有一个正在运作。没有错误。以下是我尝试过的事情:

$("#computer-grid").jqGrid("setSelection", "3");

var hardwareId = $("#HardwareId").val();
$("#computer-grid").jqGrid("setSelection", hardwareId);

loadComplete

loadComplete: function () {
    $("computer-grid").setSelection(hardwareId, true);
}

并在loadComplete调用外部函数:

loadComplete: function () {
    showSelectedRow();
}


function showSelectedRow() {
    var hardwareId = $("#HardwareId").val();
    $("computer-grid").setSelection(hardwareId, false);
}

如果有其他选项,我不必使用setSelection。我只想突出显示网格行hardwareId不为空。

///// EDIT /////// 所需的其他信息:

我正在使用从trirand.com下载的jqGrid 4.8.2。 我在页面上有2个网格。

    var computerGridUrl = $("#CpuFunctionUrl").val();   //window.GetCpuGridUrl();
    var mobileGridUrl = $("#MobileFunctionUrl").val();  //window.GetMobileGridUrl();

    $("#computer-grid").jqGrid({

        url: computerGridUrl,
        datatype: "json",
        colNames: ['Id', 'Type', 'Model', 'Description', 'Price'],
        colModel: [
                { name: "HardwareId", key: true, hidden: true },
                { name: "ItemType", sortable: true},
                { name: "Model", sortable: true },
                { name: "ItemDescription", width: 400 },
                { name: "Price", formatter: "currency", align: "center", sortable: true }
        ],
        loadonce: true,
        height: '200',
        autowidth: true, 
        pager: "#cpu-grid-pager",
        onSelectRow: function (id) {
            SetDeviceId(id);
            UnSelectRow("#mobile-grid");
        },
        loadComplete: function () {
            showSelectedRow();
        }
    });

    $("#mobile-grid").jqGrid({

        url: mobileGridUrl,
        datatype: "json",
        colNames: ['Id', 'Type', 'Model', 'Description', 'Price'],
        colModel: [
                { name: "HardwareId", key: true, hidden: true },
                { name: "ItemType" },
                { name: "Model", sortable: true},
                { name: "ItemDescription", width: 400 },
                { name: "Price", formatter: "currency", align: "center" }
        ],
        loadonce: true,
        height: '200',
        autowidth: true,
        pager: "#mobile-grid-pager",
        onSelectRow: function (id) {
            SetDeviceId(id);
            UnSelectRow("#computer-grid");
        }
    });

function SetDeviceId(id) {
    var deviceId = id;
    if (deviceId > 0) {
        $("#SelectedDevice").val(deviceId);
    }
}

function UnSelectRow(gridName)
{
    $(gridName).jqGrid("resetSelection");
}

function showSelectedRow() {
    var hardwareId = $("#HardwareId").val();
    $("computer-grid").setSelection(hardwareId);
}

/////////////////第二次编辑 - 添加json字符串响应/////////////////

这是填充网格的初始数据加载:

[{"HardwareId":1,"Model":"Latitude 14 7000","ItemDescription":"lightweight mobile computer","ItemType":"Lightweight Laptop","IsMobile":false,"IsMiFi":false,"Price":1254.00,"CellularPlan":null,"AppStoreId":null,"SelectedDevice":0,"RequestId":0},{"HardwareId":2,"Model":"Latitude E6540","ItemDescription":"A mobile computer","ItemType":"Standard Laptop","IsMobile":false,"IsMiFi":false,"Price":2096.00,"CellularPlan":null,"AppStoreId":null,"SelectedDevice":0,"RequestId":0},.....]

用户选择一行后,rowid将保存到" SelectedDevice"隐藏字段,在FORM中,然后提交给服务器。网格不在表单中。一切正常。

我现在正在做的是处理用户回到此页面时会发生什么。这个Web应用程序有6个视图,每个页面都有一个表单,有点像向导。如果用户返回该页面的网格,则服务器发送HardwareId,然后将其存储在隐藏字段'#HardwareId'中。我现在尝试的是,当网格填充时,它应该在HardwareId隐藏字段中查找值,如果有,则应突出显示网格中的相应行。

因此,在用户单击后退按钮后,此隐藏字段将获得一个值:

<input data-val="true" data-val-number="The field HardwareId must be a number." data-val-required="The HardwareId field is required." id="HardwareId" name="HardwareId" type="hidden" value="4" />

1 个答案:

答案 0 :(得分:0)

似乎其中一些应该有效,不知道为什么。我注意到我的一些例子中缺少网格id调用中的井号(#),这导致了这个工作代码:

网格定义内:

        loadComplete: function () {
            showSelectedRow();
        }

然后功能:

function showSelectedRow() {
    var hardwareId = $("#HardwareId").val();
    $("#computer-grid").jqGrid('setSelection', hardwareId);
}

立即工作。