2

私は少し迷っています。JqG​​ridに基づくソリューションを実装し、関数をデータ型として使用しようとしました。私は推測する本ですべてを設定しました。WSが呼び出されてJSONが返され、ajax呼び出しでクライアント側で成功し、jqGridを使用して「バインド」しましaddJSONDataたが、グリッドは空のままです。今は手がかりがありません...同じページの他の「ローカル」サンプルは問題なく動作します(jsonstring ...)

私のWSメソッドは次のようになります。

[WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string GetGridData()  
         {  
             // Load a list 
             InitSessionVariables();
             SA.DB.DenarnaEnota.DenarnaEnotaDB db = new SAOP.SA.DB.DenarnaEnota.DenarnaEnotaDB();
             DataSet ds = db.GetLookupForDenarnaEnota(SAOP.FW.DB.RecordStatus.All);

             // Turn into HTML friendly format  
             GetGridData summaryList = new GetGridData();

             summaryList.page = "1";
             summaryList.total = "10";
             summaryList.records = "160";
             int i = 0;
             foreach (DataRow dr in ds.Tables[0].Rows)  
             {
                 GridRows row = new GridRows();
                 row.id = dr["DenarnaEnotaID"].ToString();
                 row.cell = "[" + "\"" + dr["DenarnaEnotaID"].ToString() + "\""
                                       + "," + "\"" + dr["Kratica"].ToString() + "\""
                                       + "," + "\"" + dr["Naziv"].ToString() + "\""
                                       + "," + "\"" + dr["Sifra"].ToString() + "\""

                          + "]";
                 summaryList.rows.Add(row);
             }  
             return JsonConvert.SerializeObject(summaryList);

         }

私のASCXコードはこれです:

jQuery(document).ready(function() {
  jQuery("#list").jqGrid({
    datatype: function(postdata) {
      jQuery.ajax({
        url: '../../AjaxWS/TemeljnicaEdit.asmx/GetGridData',
        data: '{}',
        dataType: 'json',
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        complete: function(jsondata, stat) {
          if (stat == "success") {
            var clearJson = jsondata.responseText;

            var thegrid = jQuery("#list")[0];
            var myjsongrid = eval('(' + clearJson + ')');
            alfs
            thegrid.addJSONData(myjsongrid.replace(/\\/g, ''));
          }
        }
      });
    },
    colNames: ['DenarnaEnotaID', 'Kratica', 'Sifra', 'Naziv'],
    colModel: [{
        name: 'DenarnaEnotaID',
        index: 'DenarnaEnotaID',
        width: 100
      },
      {
        name: 'Kratica',
        index: 'Kratica',
        width: 100
      },
      {
        name: 'Sifra',
        index: 'Sifra',
        width: 100
      },
      {
        name: 'Naziv',
        index: 'Naziv',
        width: 100
      }
    ],

    rowNum: 15,
    rowList: [15, 30, 100],
    pager: jQuery('#pager'),
    sortname: 'id',
    //  loadtext:"Nalagam zapise...",
    // viewrecords: true, 
    sortorder: "desc",
    // caption:"Vrstice", 
    // width:"800",
    imgpath: "../Scripts/JGrid/themes/basic/images"
  });

});

WSから次のようなJSONを取得します。

{”page”:”1″,”total”:”10″,”records”:”160″,”rows”:[{"id":"18","cell":"["18","BAM","Konvertibilna marka","977"]“},{”id”:”19″,”cell”:”["19","RSD","Srbski dinar","941"]“},{”id”:”20″,”cell”:”["20","AFN","Afgani","971"]“},{”id”:”21″,”cell”:”["21","ALL","Lek","008"]“},{”id”:”22″,”cell”:”["22","DZD","Alžirski dinar","012"]“},{”id”:”23″,”cell”:”["23","AOA","Kvanza","973"]“},{”id”:”24″,”cell”:”["24","XCD","Vzhodnokaribski dolar","951"]“},{”id”:”25″,”cell”:”

………………

["13","PLN","Poljski zlot","985"]“},{”id”:”14″,”cell”:”["14","SEK","Švedska krona","752"]“},{”id”:”15″,”cell”:”["15","SKK","Slovaška krona","703"]“},{”id”:”16″,”cell”:”["16","USD","Ameriški dolar","840"]“},{”id”:”17″,”cell”:”["17","XXX","Nobena valuta","000"]“},{”id”:”1″,”cell”:”["1","SIT","Slovenski tolar","705"]“}]}

私はこのJavaScriptを登録しました:

clientSideScripts.RegisterClientScriptFile("prototype.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/prototype-1.6.0.2.js"));

clientSideScripts.RegisterClientScriptFile("jquery.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/jquery.js"));
clientSideScripts.RegisterClientScriptFile("jquery.jqGrid.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/jquery.jqGrid.js"));
clientSideScripts.RegisterClientScriptFile("jqModal.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/js/jqModal.js"));
clientSideScripts.RegisterClientScriptFile("jqDnR.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/js/jqDnR.js"));

基本的にはバカなことだと思いますが…でも今はわかりません…

4

8 に答える 8

9

過去数時間、同じ問題を解決しようとしています。AddJSONData を機能させることをあきらめました。私の Web サービス メソッドは配列を返すため、addRowData を使用すると機能するように見えます。

function ReceivedClientData(data) {
        var thegrid = $("#list4");
        for (var i = 0; i < data.length; i++) {
            thegrid.addRowData(i+1, data[i]);
        }
    }
于 2009-02-14T08:25:55.783 に答える
2

jqGrid の設定は問題ないようです。

に戻ってくるjsondata.responseTextものは、あなたが説明したものであると確信していますか?

私が .NET で記述した Web サービスは、次のような形式の JSON を返します。

{"d": "{”page”:”1″,”total”:”10″,”records”:”160″,”rows”:[{"id":"18","cell":"["18","BAM","Konvertibilna marka","977"]“}"

私の機能では、これをしなければなりませんでした:

complete: function(data) {
    var stuff = JSON.parse(data.responseText);
    jQuery("#grid")[0].addJSONData(JSON.parse(stuff.d));
}

必要なデータを実際に取得する前に、文字列を JSON に 2 回変換する必要がありました。

大きな問題がある場合。この部分を少しずつデバッグすることをお勧めします。次のような単純なステートメントを実行します。

jQuery("#list")[0].addJSONData(JSON.parse("{total: 1, page: 1, records: 1, rows : [ {id: '1', cell:['1', '2007-10-01', 'test', 'note', 'new', '200.00', '10.00', '210.00']} ] }"));

それは少なくともうまくいくはずです。その後、Web サービスから取得した出力を分析し、そのステートメントを「完全」に実行できることを確認します。

于 2009-02-15T03:24:02.583 に答える
1

また、Web サービスを使用してデータを jqGrid に渡しています。私は同じ問題に遭遇しました.ajax 関数の完全な部分のコードを次に示します。

complete: function(jsondata, stat) {
             if (stat == "success") {
                var thegrid = jQuery("#list2")[0];
                var jsonObject = eval('(' + jsondata.responseText + ')');
                thegrid.addJSONData(jsonObject.d);
             }
           }

キーは、responseText が JSON オブジェクトに評価された後 の.dです。

于 2009-09-30T14:58:02.997 に答える
1

実際、キーは、ドキュメントに表示されない addJSONData のパラメーターのようです。

function ReceivedClientData(data) {
        var thegrid = $("#rowed2");
        thegrid[0].addJSONData(data,thegrid.bDiv,9)            
    }

それに伴うWebメソッドは次のとおりです。

    [WebMethod(EnableSession = true)]
    public object GetTestClients(int pagenum, int rows)
    {
        var lst = Session["lst"] as List<Entities.Client>;
        if (lst == null)
        {
            lst = new List<Entities.Client>();
            for (int i = 1; i <= 5; i++)
            {
                lst.Add(new TF.WebApps.Entities.Client()
                {
                    ClientID = "Client" + i,
                    Firstname = "first" + i,
                    Lastname = "last" + i
                });
            }
            Session["lst"] = lst;
        }
        var v = from c in lst
                select new
                {
                    id = c.ClientID,
                    cell = new object[] 
                    {
                        c.ClientID,
                        c.Firstname,
                        c.Lastname
                    }
                };

        var result = new
        {
            total = v.Count() / rows,
            page = pagenum,
            records = rows,
            rows = v.Skip((pagenum-1)*rows).Take(rows).ToArray()
        };


        return result;
    }
于 2009-02-14T15:28:08.030 に答える
0

これは私のために働きます:

mygrid[0].addJSONData(result, mygrid.bDiv, 0);

またはこれを試してください:

mygrid[0].addJSONData($.toJSON(result), mygrid.bDiv, 0);

私のグリッドデータ型はjsonstringです。

于 2009-04-21T20:57:29.077 に答える
0

jqGrid の提案のいくつかが誤解を招くものであったことに、私は非常に驚いています。

サービスから jqGrid に JSON データをフィードするには、2 つの方法があります。

結果の 1 ページに十分なデータだけで、jqGrid のデータの 1 つの「チャンク」を返すメソッドを作成できます。

または、JSON サービスをさらに呼び出す必要なく、すべての JSON データを一度に返し、jqGrid でページングを処理できるようにすることもできます。

その鍵となるのは、loadonce jqGrid 設定です。

loadonce: true,

たとえば、特定の顧客 ID の注文のリストを返す JSON Web サービスがあります。

http://www.iNorthwind.com/Service1.svc/getOrdersForCustomer/BERGS

..そして私はそれからこのjqGridを作成したい:

ここに画像の説明を入力

jqGrid 宣言は次のようになります。

$("#tblOrders").jqGrid({
    url: 'http://www.iNorthwind.com/Service1.svc/getOrdersForCustomer/BERGS',
    contentType: "application/json",
    datatype: "json",
    jsonReader: {
        root: "GetOrdersForCustomerResult",
        id: "OrderID",
        repeatitems: false
    },
    mtype: "GET",
    colNames: ["ID", "Date", "ShipName", "ShipAddress", "ShipCity", "ShippedDate"],
    colModel: [
        { name: "OrderID", width: 80, align: "center" },
        { name: "OrderDate", width: 90, align: "center" },
        { name: "ShipName", width: 250 },
        { name: "ShipAddress", width: 250 },
        { name: "ShipCity", width: 95 },
        { name: "ShippedDate", width: 95 },
    ],
    pager: "#pager",
    height: 'auto',
    rowNum: 8,
    rowList: [8, 16, 24],
    loadonce: true,
    sortname: "OrderID",
    sortorder: "desc",
    viewrecords: true,
    gridview: true,
    autoencode: true,
    caption: "Northwind orders"
});

上記の 3 行に注意してください。

    jsonReader: {
        root: "GetOrdersForCustomerResult",
        id: "OrderID",
        repeatitems: false
    },

これにより、厄介な「addJSONdata」例外が発生するのを防ぎ、jqGrid に、実際にはデータの JSON 配列が JSON 結果のGetOrdersForCustomerResult部分に格納されていることを伝えます。

{
  GetOrdersForCustomerResult: [
  {
    OrderDate: "8/12/1996",
    OrderID: 10278,
    ShipAddress: "Berguvsvägen 8",
    ShipCity: "Luleå",
    ShipName: "Berglunds snabbköp",
    ShipPostcode: "S-958 22",
    ShippedDate: "8/16/1996"
  },
  {
    OrderDate: "8/14/1996",
    OrderID: 10280,
    ...etc...

以上です。AddJSONdata を呼び出す必要はまったくありません。

この例の完全なウォークスルーは、私のブログにあります。

http://mikesknowledgebase.com/pages/Services/WebServices-Page10.htm

(これらの問題を調べ始めた 3 時間前に、この記事を読んでおけばよかったと思います!!)

于 2014-04-02T11:45:01.340 に答える
0

あなたの問題はaddJSONData、responseText で使用する必要があることです。eval次に、JSON 文字列を JavaScript で JSON に解析します。それはうまくいくはずです。

Frenchie の答えには、いくつかのヒントを追加します。

complete: function(jsondata, stat) {
         if (stat == "success") {              
            var jsonObject = (eval("(" + jsondata.responseText + ")"));
             $('#list2')[0].addJSONData(JSON.parse(jsonObject.d));
         }
       }

それがあなたのJSONです。JsonReaderまた、データのロード中にエラーが発生しないように、JqGrid を適切に構成する必要があります。これで問題が解決するはずです。

jsonReader: {
            root: "rows", //arry containing actual data
            page: "page", //current page
            total: "total", //total pages for the query
            records: "records", //total number of records
            repeatitems: false,
            id: "DenarnaEnotaID" //index of the column with the PK in it
        },
于 2011-02-24T05:20:01.867 に答える