4
問題:jqGrid的使用都排序中colModel的索引屬性,而不是名稱屬性和搜索
使用的jqGrid顯示錶的數據。表具有外鍵,我們想要顯示其外鍵而不是Id的文本。我也希望該用戶可以對外鍵進行排序和過濾。
例:
- 人表:ID,姓名,EducationId(教育表的外鍵)
- 教育能夠:ID,姓名
我們要展示每個人與他/她的教育名稱在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
之間的關係,這些數據用於顯示網格中的名稱而不是id,還用於創建下拉值和文本。 - 我忽略寫其他屬性,如尋呼機,pagesize等
@Html.GetEduType()
是剃鬚刀服務器端功能。它只是返回像[Education Id]:[Education Name]
對。例如:(1:'Diploma',2:'M.S.',...
)(我只是用它來獲得教育數據一次,並沒有使用UrlData
) (是的,我用它在ASP.Net MVC 3,但它不是一個很重要的一點)
我的問題: 它很適合顯示數據和根據其名稱對教育進行排序。但是,當我想過濾教育時,它會向服務器發送Http Post sField
中的索引值(Education.Name
)而不是名稱值(EducationId
)。這個問題將通過發送名稱值而不是索引值來解決。
謝謝。