【发布时间】:2011-06-15 21:14:06
【问题描述】:
我的启用 AJAX 的 WCF 服务使用此合同返回 JSON,
[DataContract]
public class JQGridContract
{
[DataContract]
public class Row
{
[DataMember]
public int id { get; set; }
[DataMember]
public List<string> cell { get; set; }
public Row()
{
cell = new List<string>();
}
}
[DataMember]
public int page { get; set; }
[DataMember]
public int total { get; set; }
[DataMember]
public int records { get; set; }
[DataMember]
public List<Row> rows { get; set; }
public JQGridContract()
{
rows = new List<Row>();
}
}
所以结果中的每一行数据都是无类型的——一行本质上只是一个没有附加任何列名的列表。
我认为这让我无法使用 colModel 的 'jsonmap' 属性?基本上我正在从数据库中检索一个 DataTable,然后将该 DataTable 放入这个 JQGridContract 表单中。但是,来自 DataTable 的列信息不包含在传递给客户端的 json 中。
我希望能够将我的底层 DataTable 的一列映射到我的 jqGrid 的一列,但不需要强输入我的数据协定。这可能吗?我认为它可能使用匿名类型,其中匿名对象列表(每个匿名对象是一行)具有与底层 DataTable 中的每一列相对应的属性,但我无法做到这一点。
谢谢。
编辑
这是我想要实现的示例(使用服务器端代码,而不是 javascript)。
下面本质上是在 c# 中完成的 jqGrid 的列模型:
return new JQGridColumnCollection()
{
new JQGridColumn()
{
DataField = "ID", // maps to the DataTable
DataType = typeof(int),
HeaderText = "ID",
PrimaryKey = true,
},
new JQGridColumn()
{
DataField = "Name",
DataType = typeof(string),
HeaderText = "Name"
},
new JQGridColumn()
{
DataField = "Birthdate",
DataType = typeof(DateTime),
HeaderText = "Birth Date"
}
};
每列的“DataField”属性将该列映射到底层数据表中的一列。 DataTable 中列的顺序可能不同:
DataTable table = GetDataTable(" SELECT [Birthdate], [ID], [Name] From PersonTable ");
但是无论我如何查询我的数据库,网格仍然会显示第一列是 ID,第二列是名称,第三列是出生日期。我不必更改我的 SQL 查询来更改网格中列的顺序。
我本质上希望在 jqGrid 的客户端 colModel 中具有等效的 DataField 属性。这将要求我的 JSON 列被命名,或者我至少可以将 jqGrid 列映射到 JSON 数据源中列的数字索引。
【问题讨论】:
标签: javascript asp.net wcf json jqgrid