【问题标题】:JQGrid Source not populating after delete删除后未填充 JQGrid 源
【发布时间】:2012-11-14 22:16:10
【问题描述】:

我正在使用 $(document).ready 中设置的 jqGrid,如下所示:

jQuery("#list").jqGrid({
        datatype: 'json',
        colNames: ['ID', 'Note', 'Date Added'],
        colModel: [
            { name: 'ID', index: 'ID', width: 60, key: true },
            { name: 'ContactNote', index: 'ContactNote', width: 300, cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal;"'; } },
            { name: 'ContactDate', index: 'DateAdded', width: 100 }
        ],
        mtype: 'POST',
        viewrecords: true,
        jsonReader: { repeatitems: false },
        ignoreCase: true,
        height: 450,
        loadonce: false,
        onSelectRow: function (id) { $('#ContactId').val(id); }
    });

这是页面的 HTML:

<div class="col-12">
<div class="ui-content-6 ui-widget-content ui-corner-all">
    @using (Html.BeginForm())
    {
        <h3 class="ui-widget-header ui-corner-all">Enter account number</h3>
        <div class="field-container">
            @Html.LabelFor(o => o.AccountNumber)
            @Html.TextBoxFor(o => o.AccountNumber)
        </div>

        <div class="form-submit">
            <button id="btnSearchContactItems">Get Contact Items</button>
        </div>

        <h3 class="ui-widget-header ui-corner-all">Contact item list</h3>

        <table id="list" class="scroll" cellpadding="0" cellspacing="0"></table>

        <div class="form-submit">
            <button id="btnRemoveContactItem" type="submit">Remove Selected Contact Item</button>
        </div>

        @Html.HiddenFor(o => o.ContactId)

        @Html.ValidationSummary()
    }
</div>

btnSearchContactItems 按钮有一个点击事件:

$("#btnSearchContactItems").click(function () {

        $("#list")
            .jqGrid('setGridParam', { postData: { accountNumber: $('#AccountNumber').val() }, url: baseSearchURL })
            .trigger('reloadGrid');

        return false;
    });

问题来了:

我让用户输入他们的帐号,然后单击 btnSearchContactItems 按钮,在网格中填写一些注释。选择其中一个注释并单击BTNRemoveContActiTITEM按钮时,调用操作并删除备注。问题是,一旦删除了 not ,网格就会清空。我想要做的是让网格重新加载数据减去已删除的行。

我发誓,在我的一生中,我无法让数据重新填充。我尝试在网格加载、页面加载等中触发按钮单击,但仍然没有。如果我物理单击按钮,它只会再次填充网格。有人有什么想法吗?

【问题讨论】:

    标签: javascript asp.net-mvc jqgrid


    【解决方案1】:

    我认为您不想在页面开始时向服务器发送任何请求。为此,您可以在创建网格时使用datatype: "local"。您可以在创建网格时设置url: baseSearchURL。该参数将被datatype: "local" 忽略。

    现在我回到你的主要问题:你可以在创建网格时直接定义postData选项,但你应该使用函数(方法)作为属性(详见the answer):

    postData: {
        accountNumber: function () {
            var account = $('#AccountNumber').val();
            return account ? account : null;
        }
    }
    

    如果重新加载网格,每次都会调用方法accountNumber。所以你可以使用

    $("#btnSearchContactItems").click(function () {
        $("#list").jqGrid('setGridParam', { datatype: "json" }}).trigger('reloadGrid');
        return false;
    });
    

    如果您愿意,如果$('#AccountNumber').val() 为空,您还可以在click 处理程序datatype: "local" 内部设置。

    如果您真的不想将任何accountNumber 属性发送到服务器,则其值为null"",您可以按以下形式使用serializeGridData

    serializeGridData: function (postData) {
        var propertyName, propertyValue, dataToSend = {}, val;
        for (propertyName in postData) {
            if (postData.hasOwnProperty(propertyName)) {
                propertyValue = postData[propertyName];
                val = $.isFunction(propertyValue) ? propertyValue() : propertyValue;
                if (propertyName !== "accountNumber" || val) {
                    // don't send "accountNumber" with empty value
                    dataToSend[propertyName] = val;
                }
            }
        }
        return dataToSend; // ?? probably you can use JSON.stringify(dataToSend);
    }
    

    (详见the answer

    此外,我建议您设置gridview: true 以提高网格的性能并添加rowNum: 10000。 jqGrid 旨在显示分页数据。您不使用pager 选项,但rowNum 的默认值为20。所以不设置rowNum: 10000 jqGrid 将只显示前20 行数据。这不是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多