jquery – 在排序和搜索期间,JqGrid使用colModel的index属性而不是name属性

题:

使用jqgrid显示表的数据. table有外键,我们想显示其外键的文本而不是Id.我还希望用户可以对外键进行排序和过滤.

例:

>人员表:Id,Name,EducationId(教育表的外键)
>教育能力:Id,姓名

我们希望在jqgrid中向每个人显示他/她的教育名称.

>如果用户单击教育列,则根据教育名称(非教育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,还可以创建下拉值和文本.
>我忽略了写其他属性,如pager,pagesize等
> @ Html.GetEduType()是剃刀服务器端功能.它只返回像这样的对
[教育ID]:[教育名称].例如:(1:’Diploma’,2:’M.S.’,…)(我只是使用它来获取教育数据一次并且没有使用UrlData)
(是的,我在ASP.Net MVC 3中使用它,但它不重要)

我的问题:
它非常适合显示数据并根据其名称对教育进行排序.但是当我想过滤Education时,它会将Http Post sField中的索引值(Education.Name)而不是名称值(EducationId)发送到服务器.只需通过发送名称值而不是索引值即可解决此问题.

谢谢.

解决方法

我用这种方式解决了我的问题:

>首先,我处理beforeSearch事件:

.filterToolbar({ stringResult: true,beforeSearch: searchPreparation })

>这是searchPreparation函数

function searchPreparation(grid) {
  if (grid == undefined)
      grid = $(this);
  else
      grid = $(grid);
  var postData = grid.jqgrid('getGridParam','postData');
  var searchData = jQuery.parseJSON(postData.filters);
  var gridCol = grid.getGridParam("colModel");
  for (var i = 0; i < searchData.rules.length; i++) {
      for (var j = 0; j < gridCol.length; j++) {
          if (gridCol[j].index != gridCol[j].name && searchData.rules[i].field == gridCol[j].name) {
              searchData.rules[i].field == gridCol[j].index;
              break;
          }
      }
  }
  grid.jqgrid('setGridParam',{ postData: { filters: JSON.stringify(searchData)} });
  return false;
}

在searchPreparation中,我首先获得发布数据并解析它.之后,我搜索其索引不等于其名称的列,并查找是否有任何包含这些列的过滤器.如果有任何列,我用index替换字段.
最后我设置了帖子数据.通过JSON.stringify通知数据转换为Json,您可以找到它here.

我使用此函数为带有下拉列表的过滤器数据(使用下拉项的值不是文本)

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: &lt;span id=&quot...
jQuery 添加水印 &lt;script src=&quot;../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...