0

$(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ボタンをクリックして、グリッドにメモを入力します。メモの1つを選択し、btnRemoveContactItemボタンをクリックすると、アクションが呼び出され、メモが削除されます。問題は、notが削除されると、グリッドが空になることです。私がしたいのは、削除された行を除いたデータでグリッドをリロードすることです。

私は、私の人生の間、データを再入力することはできません。グリッドロード、ページロードなどでボタンクリックを起動してみましたが、まだ何もありません。ボタンを物理的にクリックした場合にのみ、グリッドが再び塗りつぶされます。誰か考えがありますか?

4

1 に答える 1

0

ページの開始時にサーバーにリクエストを送信したくないと思います。これを行うにはdatatype: "local"、グリッドを作成する場合に使用できます。url: baseSearchURLグリッド作成時に設定できます。パラメータは で無視されdatatype: "local"ます。

ここで、主な質問に戻ります。postDataグリッドの作成時にオプションを直接定義できますが、関数 (メソッド) をプロパティとして使用する必要があります (詳細については、回答を参照してください)。

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

このメソッドaccountNumberは、グリッドがリロードされるたびに呼び出されます。だから、あなたが使用することができます

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

必要に応じて、空の場合はclickハンドラー内に追加で設定できます。datatype: "local"$('#AccountNumber').val()

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);
}

(詳しくは回答をご覧ください)

gridview: trueさらに、グリッドのパフォーマンスを向上させるために設定して追加することをお勧めしますrowNum: 10000。jqGrid は、ページ化されたデータを表示するように設計されています。オプションは使用しませんpagerが、のデフォルト値は 20 です。したがって、 jqGridrowNumを設定しないと、データの最初の 20 行のみが表示されます。rowNum: 10000それはあなたが望むものではありません。

于 2012-11-14T23:21:06.233 に答える