服务端返回的是list,前台接收之后是一个json数组对像。但是jqgrid需要的json格式是特定的。怎么转换啊?前台就只能是js. public List<aco.sysMgr.domain.Module> GetModuleList(string id)
        {
            List<aco.sysMgr.domain.Module> list = new List<aco.sysMgr.domain.Module>();            Item it01 = new Item() { Code = "0", AbbrName = "用户管理", QuickCode = "usrMgr.html" };
            Item it02 = new Item() { Code = "1", AbbrName = "角色管理", QuickCode = "roleMgr.html" };
            Item it03 = new Item() { Code = "2", AbbrName = "权限管理", QuickCode = "authMgr.html" };
            Module m1 = new Module() { Code = "4", AbbrName = "系统管理" };
            m1.Members.Add(it01);
            m1.Members.Add(it02);
            m1.Members.Add(it03);
            Item it11 = new Item() { Code = "0", AbbrName = "采购管理", QuickCode = "pu.html" };
            Item it12 = new Item() { Code = "1", AbbrName = "库存管理", QuickCode = "st.html" };
            Item it13 = new Item() { Code = "2", AbbrName = "销售管理", QuickCode = "sa.html" };
            Module m2 = new Module() { Code = "1", AbbrName = "业务系统" };
            m2.Members.Add(it11);
            m2.Members.Add(it12);
            m2.Members.Add(it13);
            list.Add(m1);
            list.Add(m2);
            list.Sort();
            return list;
        }
这个是测试用的一个后台方法。
下面的是客户端代码: $(function () {            $("#tab").jqGrid({
                url: '../../services/svc/sysInit.svc/GetModuleList',
                //                                postData: { id: "1" },
                datatype: function () {
                    $.ajax({
                        url: '../../services/svc/sysInit.svc/GetModuleList',
                        dataType: 'json',
                        type: 'POST',
                        data: '{"id":"1"}',
                        contentType: 'application/json; charset=utf-8',
                        error: function (da, state, stattext) {
                            if (!(status == 200 && statusText == "parsererror")) {
                                alert("客服端解析数据错误!\n请与管理员联系");
                            }
                            else {
                                alert("请求服务器错误!\n请稍后再试或与管理员联系");
                            }
                        },
                        subGrid: true,
                           complete: function (jdata, state) {
                            alert("请求完成");
                            if (state == "success") {
                                var tablist = $("#tab")[0];
                                var jsd = eval("(" + jdata.responseText + ")");
                                var jsda = jsd.d;
                                for (var i = 0; i < jsda.length; i++) {
                                    $("#tab").addRowData(i + 1, jsda[i]);
                                    var dm = jsda[i].Members;
                                                                                                                                            } }
                              //tablist.addJSONData(jsd.d);
                               // jsd = null;
                                //jsonresponse = null;
                            }
                        }
                    });
                },
                colNames: ["类型", "编号", "编码", "简称", "描述", "名称", "快捷键", "备注"],
                colModel: [
                 { name: "__type", index: "__type", width: "90", sortable: true },
                        { name: "Id", index: "Id", sortable: true },
                         { name: "Code", index: "Code", width: "90", sortable: true },
                        { name: "AbbrName", index: "AbbrName", width: "90", sortable: true },
                         { name: "Description", index: "Description", width: "90", sortable: true },
                          { name: "Name", index: "Name", width: "90", sortable: true },
                           { name: "QuickCode", index: "QuickCode", width: "90", sortable: true },
                            { name: "Members", index: "Members", width: "90", sortable: true }
                        ],
                subGridModel: [{ name: ["类型", "编号", "编码", "简称", "描述", "名称", "快捷键", "备注"]}],
                width: 600,
                height: "100%",
                ignoreCase: true,
                viewrecords: true,
                rownumbers: true,
                loadonce: true,
                sortname: 'Id',
                sortorder: "asc",
                sortable: true,
                pager: '#divpager',
                caption: "JSONDataTypeTest"
            }).navGrid('#divpager', { edit: true, add: true, del: true }); ;
        });我想知道怎么样加载它的子表,如subgrid?
有知道的希望能帮帮忙,

解决方案 »

  1.   

    你可以在后台转换一下,把List转成Json返回组前台。using System;
    using System.Data;
    using System.Text;
    using System.Collections.Generic;
    using System.Reflection;
    using System.Data.Common;
    using System.Collections;
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Json;         /// <summary>
            /// List转成json 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="list"></param>
            /// <returns></returns>
            public static string ListToJson<T>(IList<T> list)
            {
                object obj = list[0];
                return ListToJson<T>(list, obj.GetType().Name);
            }      /// <summary>
            /// List转成json 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="jsonName"></param>
            /// <param name="list"></param>
            /// <returns></returns>
            public static string ListToJson<T>(IList<T> list, string jsonName)
            {
                StringBuilder Json = new StringBuilder();
                if (string.IsNullOrEmpty(jsonName))
                    jsonName = list[0].GetType().Name;
                Json.Append("{\"" + jsonName + "\":[");
                if (list.Count > 0)
                {
                    for (int i = 0; i < list.Count; i++)
                    {
                        T obj = Activator.CreateInstance<T>();
                        PropertyInfo[] pi = obj.GetType().GetProperties();
                        Json.Append("{");
                        for (int j = 0; j < pi.Length; j++)
                        {
                            Type type;
                            object o = pi[j].GetValue(list[i], null);
                            string v = string.Empty;
                            if (o != null)
                            {
                                type = o.GetType();
                                v = o.ToString();
                            }
                            else
                            {
                                type = typeof(string);
                            }                        Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(v, type));                        if (j < pi.Length - 1)
                            {
                                Json.Append(",");
                            }
                        }
                        Json.Append("}");
                        if (i < list.Count - 1)
                        {
                            Json.Append(",");
                        }
                    }
                }
                Json.Append("]}");
                return Json.ToString();
            }
      

  2.   

    可以用拼接的方式(resp.setCharacterEncoding(req.getCharacterEncoding());
    String page = req.getParameter("page"); // 取得当前页数
    String rows = req.getParameter("rows"); // 取得每页显示行数
    int totalRecord = MenuDAOImpl.queryMenuCount(); // 总记录数
    System.out.println("分页数据总大小:" + totalRecord);
    int totalPage = totalRecord % Integer.parseInt(rows) == 0 ? totalRecord
    / Integer.parseInt(rows)
    : totalRecord / Integer.parseInt(rows) + 1; // 计算总页数
    System.out.println("总页数:" + totalPage);
    int index = (Integer.parseInt(page) - 1) * Integer.parseInt(rows); // 开始记录数
    int pageSize = Integer.parseInt(rows);
    List<Menu> list = MenuDAOImpl.queryMenuPage(index, pageSize);
    System.out.println("分页数据是:" + list);
    PrintWriter out = resp.getWriter();
    StringBuffer sb = new StringBuffer();
    sb.append("{\"total\" : " + totalPage + ",\"page\" : " + page
    + ",\"records\" : " + totalRecord + ",\"rows\" : [");
    for (Menu menu : list) {
    sb
    .append(String
    .format(
    "{\"cell\":[\"mid\": %s,\"name\":\"%s\",\"url\":\"%s\",\"target\":\"%s\",\"description\":\"%s\",\"parent\":\"%s\"]},",
    menu.getMid(), menu.getName(), menu
    .getUrl(), menu.getTarget(),
    menu.getDescription(), menu.getParent()));
    }
    if (!list.isEmpty()) {
    sb.deleteCharAt(sb.length() - 1);
    }
    sb.append("]}");
    // JSONObject json=new JSONObject();
    // json.put("list", list);
    // System.out.println(json);
    // System.out.println(sb.toString());
    // resp.getWriter().print(json.toString());
    out.print(sb.toString());),可以直接用JSONObject这个类来转换。