Моя служба WCF с поддержкой AJAX возвращает 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>();
}
}
Таким образом, каждая строка данных в результатах нетипизирована - строка по сути является просто списком без каких-либо имен столбцов.
Думаю, это делает невозможным использование атрибута jsonmap в colModel?В основном я извлекаю DataTable из базы данных, а затем помещаю этот DataTable в эту форму JQGridContract.Информация о столбцах из DataTable не содержится в json, передаваемом клиенту.
Я бы хотел иметь возможность сопоставить столбец моего базового DataTable со столбцом моего 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"
}
};
Свойство «DataField» каждого столбца отображает этот столбец в столбец в подчиняющейся таблице DataTable.Порядок столбцов в DataTable может быть другим:
DataTable table = GetDataTable(" SELECT [Birthdate], [ID], [Name] From PersonTable ");
Но независимо от того, как я запрашиваю свою базу данных, в сетке все равно будет отображаться, где первый столбец - ID, второй столбец - Имя, итретий столбец - дата рождения.Мне не нужно менять свой SQL-запрос, чтобы изменить порядок столбцов в моей сетке.
Я, по сути, хочу эквивалент свойства DataField в моей клиентской colModel для jqGrid.Для этого потребуется, чтобы мои столбцы JSON были названы или чтобы я мог по крайней мере сопоставить столбец jqGrid с числовым индексом столбца в источнике данных JSON.