0

私はこの答えを知っています:jqgridにキャンセルボタンを追加するにはどうすればよいですか?、キャンセルをトリガーするボタンはありませんが、同様の実装を試みています。ページの読み込み時に読み込まれるグリッド(デフォルトでは条件なしで読み込まれる検索)があり、ユーザーが実際に条件付きの検索を実行したときに、デフォルトの空の条件検索をキャンセルできるようにしたいと思います。ボタンは必要ないので、loadBeforeSendメソッドでxhrリクエストを追跡するだけでソリューションを簡素化しようとしています。グリッドをロードするときに、xhrがnullでない場合は中止します。コード:

var gridXhr;
function getGridData() {
    var searchParms = ...;
    var colHeaders = [...];
    var colDefinitions = [...];
    if (gridXhr != null) {
        alert(gridXhr.readyState);
        gridXhr.abort();
        gridXhr = null;
    }
    $('#grid').jqGrid('GridUnload');
    $('#grid').jqGrid({
        defaults: {...},
        autowidth:true,
        url: "<%= Page.Request.Path %>/ExecuteSearch",
        mtype: 'POST',
        ajaxGridOptions: { contentType: "application/json" },
        postData: searchParms,
        datatype: "json",
        prmNames: {
            nd: null,
            rows: null,
            page: null,
            sort: null,
            order: null
        },
        jsonReader: {
            root: function (obj) { return obj.d; },
            page: function (obj) { return 1; },
            total: function (obj) { return (obj.d.length / 20); },
            records: function (obj) { return obj.d.length; },
            id: 'CatalogID',
            cell: '',
            repeatitems: false
        },
        loadonce: true,
        colNames: colHeaders,
        colModel: colDefinitions,
        caption: "Search Results",
        pager: 'searchPaging',
        viewrecords: true,
        loadBeforeSend: function (xhr) {
            gridXhr = xhr;
        },
        loadError: function (xhr, status, error) {
            gridXhr = null;
            if (error != 'abort') {
                alert("Load Error:" + status + "\n" + error);
            }
        },
        loadComplete: function() {
            gridXhr = null;
        },
        multiselect: <%= this.MultiSelect.ToString().ToLower() %>,
        multiboxonly: true
    }).setGridWidth(popWidth);
}

私が抱えている問題は、jqGridの後続の実行が機能しないことです。loadError関数がトリガーされ、エラー(3番目のパラメーター)が「abort」になります。他の回答で行ったように、loadBeforeSendでもっと/違うことをする必要がありますか?

また、Olegは彼のサンプルコードmyGrid[0].endReq();で言及しましたが、ドキュメントにはその言及がありません-その関数は存在しますか?

4

1 に答える 1

0

私があなたを正しく理解していれば、行を変更するだけです

datatype: "json",

のようなものに

datatype: isSearchParamEmpty(searchParms) ? "local" : "json",

つまり、空の検索基準の場合ではdatatype: "local"なく、でグリッドを作成する必要があります。datatype: "json"グリッドは空のままになります。

さらに、jqGrid を1 回だけcolDefinitions作成することを検討する必要がありcolHeadersます。検索基準が異なる場合でも変更されません。グリッドを再作成する代わりに、変更postDataして呼び出すだけtrigger("reloadGrid")です。

于 2012-11-26T21:10:09.570 に答える