2

私はjqgridを初めて使用し、ついにグリッドを設定しました。グリッドがjsonリターンでグリッドデータを取得する場所を認識できるように、jsonReaderを設定する必要があるとします。しかし、何日も試した後、空白のセルができました。

これが私のグリッドです:

jQuery("#list48").jqGrid({
            url: 'dbtest.aspx/get_offsite_history2',
            datatype: "json",
            mtype: 'POST',
            ajaxGridOptions: { contentType: "application/json" },
            serializeGridData: function(postData) {
                return JSON.stringify(postData);
            },
            jsonReader: {
                root: function(obj) { alert(JSON.stringify(obj.d)); return obj.d; },
                repeatitems: false
            },
            height: 'auto',
            rowNum: 30,
            rowList: [10, 20, 30],
            colNames: ['name', 'start_date', 'duration', 'offsite_cat'],
            colModel: [
                          { name: 'name', index: 'name', width: 80, align: 'left', editable: true, edittype: 'text' },
                          { name: 'start_date', index: 'start_date', width: 120, align: 'left', editable: true, edittype: 'text' },
                          { name: 'duration', index: 'duration', width: 120, align: 'left', editable: true, edittype: 'text' },
                          { name: 'offsite_cat', index: 'offsite_cat', width: 120, align: 'left', editable: true, edittype: 'text'}],
            pager: "#plist48",
            viewrecords: true,
            sortname: 'name',
            caption: "Grouping Array Data",
            gridview: true
        });

これは、URL dbtest.aspx/get_offsite_history2からのサーバーリターンです。

{"d":"[{\"name\":\"A\",\"start_date\":\"B\",\"duration\":\"C\",\"offsite_cat\":\"D\"}]"}

「root:'d'」を設定して結果を取得すると思いますが、64行の空白行があります...

コメントを探してください...どうもありがとう

4

2 に答える 2

3

問題の理由は、サーバーコードのバグです。JSONへのシリアル化を2回行います。サーバー応答のプロパティを逆シリアル化した後dも、オブジェクトではなくJSON文字列(!!!)を取得します。典型的なエラーはJavaScriptSerializer.Serialize、Webメソッドでの手動使用です。シリアル化の結果である文字列ではなく、オブジェクト自体を返す必要があります。

現在のサーバーコードを変更せずに、次の使用法で問題を修正できます。

jsonReader: {
    root: function (obj) {
        alert(typeof obj.d === "string" ? obj.d : JSON.stringify(obj.d));
        return typeof obj.d === "string" ? $.parseJSON(obj.d) : obj.d;
    },
    repeatitems: false,
    page: function () { return 1; },
    total: function () { return 1; },
    records: function (obj) {
        return typeof obj.d === "string" ? $.parseJSON(obj.d).length : obj.length;
    }
}

または(使用する場合loadonce: true

jsonReader: {
    root: function (obj) {
        return typeof obj.d === "string" ? $.parseJSON(obj.d) : obj.d;
    },
    repeatitems: false
}

現在のサーバーコードはデータのページングを実装していないように見えるため、またはを使用するのにrowNum十分な大きさの値に増やす必要があります。rowNum: 10000loadonce: true

更新:ここで動作する変更されたデモを見つけることができます。表示されます

ここに画像の説明を入力してください

alertメッセージの後。

于 2013-02-07T10:49:52.443 に答える
0

問題は、返されたjsonデータの構造にあると思います。

以下は私が使用するものです:

{   "page":1,
    "rows":[{"id":"1","cell":["1","1","Row 1","3","9",""]},
            {"id":"2","cell":["2","2","Row 2","2","1",""]},
            {"id":"3","cell":["3","4","Row 3","2","0",""]}],
    "records":3,
    "total":1
}

各行を一意に識別するために、idのcolModelを追加する必要がある場合があります。

例えば

      colNames: ['id', 'name', 'start_date', 'duration', 'offsite_cat'],
        colModel: [
                      { name: 'id', index: 'id', hidden: true },
                      { name: 'name', index: 'name', width: 80, align: 'left', editable: true, edittype: 'text' },
                      { name: 'start_date', index: 'start_date', width: 120, align: 'left', editable: true, edittype: 'text' },
                      { name: 'duration', index: 'duration', width: 120, align: 'left', editable: true, edittype: 'text' },
                      { name: 'offsite_cat', index: 'offsite_cat', width: 120, align: 'left', editable: true, edittype: 'text'}],

お役に立てば幸いです。

于 2013-02-07T10:22:42.210 に答える