服务端返回的是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?
有知道的希望能帮帮忙,
{
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?
有知道的希望能帮帮忙,
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();
}
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这个类来转换。