我的支持AJAX的WCF服务使用合同返回JSON,使用jqGrid的colModel的“jsonmap”属性与非类型化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中。
编号喜欢能够将我的基础数据表的列映射到我的jqGrid的列,但无需强烈键入我的数据约定。这可能吗?我认为它可能是使用匿名类型,其中匿名对象(每个匿名对象是一行)的列表具有与底层DataTable中的每列相对应的属性,但我无法做到这一点。
谢谢。
EDIT
下面是要我想要实现(使用服务器端代码,而不是JavaScript的)的例子。
下面基本上是一列模型所jqGrid的在C#中,多数民众赞成做:
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"
}
};
的每一列的“数据字段”属性,列映射到在underyling数据表中的列。列的DataTable中的顺序可能会有所不同:
DataTable table = GetDataTable(" SELECT [Birthdate], [ID], [Name] From PersonTable ");
但不管我怎么查询我的数据库,网格仍然会显示,其中第一列是ID,第二列是名称,而第三列是出生日期。我不必改变我的SQL查询,以改变我的网格中的列的顺序。
我基本上想在我的客户端colModel的jqGrid的DataField属性的等价物。这将需要我的JSON列被命名,或者我至少可以将jqGrid列映射到JSON数据源中列的数字索引。
有没有反正,例如,说每个JSON行的第一个位置(第一列)应该放在实际jqGrid的最后一列?所以我可以在演示文稿中移动每列的位置,而不管它如何在发送给客户端的JSON中进行排列?我认为这是jsonmap做的,但我不确定。 – 2011-06-15 21:38:13
我刚刚在另一篇文章中提到你提到'remapColumns'函数,也许我会试试。 – 2011-06-15 21:47:28
@ Sean Thoman:你认为哪里可以提供关于客户端列映射的信息?我无法想象一个为什么可能需要它的例子。大概你描述一个你有的例子?在标准情况下,jqGrid调用一个服务器方法,例如'GetProducts'。网格列定义和'GetProducts'在'cell'列表中具有相同的列顺序。所以不需要映射。可能你有一些像[这里]描述的情况(http://stackoverflow.com/questions/5383847/is-it-possible-to-modify-the-colmodel-after-data-has-loaded-with-jqgrid/5408195 #5408195)? – Oleg 2011-06-15 21:47:44