Вопрос
использование jqgrid для отображения данных таблицы. Таблица имеет внешний ключ, и мы хотим показать текст ее внешнего ключа вместо Id. Я также хочу, чтобы пользователь мог сортировать и фильтровать внешние ключи.
Пример
- Таблица личности: Id, Name, EducationId (внешний ключ для таблицы образования)
- Образование: Id, Name
Мы хотим показать каждому человеку с именем его / ее образования имя в jqgrid.
- Если пользователь щелкнет по столбцу образования, он будет отсортирован по
Education Name
(Не Education Id
)
- Если пользователь хочет отфильтровать образование, мы показываем выпадающий список (селектор), который содержит имена образования, после того, как пользователь выбрал одно, фильтр содержит
EducationId
как sField
и Id
выбранного значения как sValue
Мое решение :
var items1 = {@Html.GetEduType()};
$(function () {
$("#list").jqGrid({
url: '/Home/GridData/',
datatype: 'json',
mtype: 'GET',
colNames: ['Name','Education'],
colModel: [
{ name: 'Name', index: 'Name' },
{ name: 'EducationId', index: 'Education.Name', search: true,
stype: 'select', searchoptions: { value: items1, sopt: ['eq', 'ne'] },
formatter: 'select' , editoptions: { value: items1 }}],
viewrecords: true});
$("#list").jqGrid('filterToolbar', { stringResult: true, searchOnEnter: true });
- С этим кодом,
Home/GetData
просто отправьте Person.Id
, Person.Name
, Person.EducationId
в виде данных json, и очень полезно не отправлять больше данных, чем требуется клиенту. Также он отправляет отношение между Education Id
и Name
один раз, и эти данные используются для отображения имени вместо идентификатора в сетке, а также для создания выпадающего значения и текста.
- Я игнорирую, чтобы написать другие свойства, такие как пейджер, размер страницы и т. Д.
@Html.GetEduType()
- функция на стороне сервера бритвы. Он просто возвращает пары, как
[Education Id]:[Education Name]
. Например: (1:'Diploma',2:'M.S.',...
) (я просто использую его для получения данных об образовании один раз, а не UrlData
)
(Да, я использую его в ASP.Net MVC 3, но это не важный момент)
Моя проблема :
Это прекрасно работает для отображения данных и сортировки образования по названию. Но когда я хочу фильтровать образование, он отправляет значение индекса (Education.Name
) вместо значения имени (EducationId
) в Http Post sField
на сервер. Эта проблема будет решена путем отправки значения имени вместо значения индекса.
Спасибо.