2012-02-15 106 views
0

我在EF4 MVC3(C#)上使用jqgrid。我基于this @Oleg的解决方案进行搜索,该解决方案工作良好,符合我的需求。jqgrid搜索:如何指定搜索列?

我在网格中定义的下列:

  ... 
      { name: 'Stato', index: 'StatoTicketID', width: 20, align: 'left', sorttype: 'int', searchoptions: { sopt: ['eq']} }, 
      { name: 'StatoTicketID', index: 'StatoTicketID', width: 20, align: 'left', sorttype: 'int', hidden: true, searchoptions: { sopt: ['eq']} }, 
      ... 

正如你所看到的,列Stato由索引StatoTicketID(隐藏整型字段)排序,排序工作正常。

问题

当我尝试搜索的Stato值,过滤器上的指数StatoTicketID传递字符串,而我想用Stato值进行搜索。所以我在控制器中得到一个异常,指定我不能将String类型转换为Int32。

当索引位于不同的列时,是否存在指定在哪一列应用搜索的方法,就像我的情况一样?

编辑&解决方法: 现在我解决我的问题与以下解决方法。

 (inside foreach (Rule rule in rules) of FilterObjectSet by Oleg) 
     .... 

     if (rule.field == "StatoTicketID") 
      { 
       rule.field = "StatoTicket.Stato"; 
       propertyInfo = typeof(T).GetProperty("stringfield"); // where stringfield is a text type column of my model 
      } 

我知道得很清楚,不是一个完美的解决方案,我希望通过你的一种回应,要知道如何直接从jqGrid的实现需要,请。

在此先感谢

回答

3

在我看来,你选择太复杂的方式。我只会发送给客户端(到jqGrid)只有Stato,必须要StatoTicketID。从你的StatoTicketID的设计角度来看,这是服务器实现的一部分,客户端不应该依赖于此。

如果您在StatoTickets表的Stato列中有唯一约束(或唯一索引),您可以在需要时快速找到StatoTicketID。因此,jqGrid只能包含和“知道”Stato,并且没有关于StatoTicketID作为实现细节的信息。

解决该问题的另一种方法是使用formatter: 'select'Stato。重要的是要明白,在Stato文本与StatoTicketID之间的映射应在之前加载的情况下,创建网格。在这种情况下的Stato列应该有一个像

formatter: 'select', edittype: 'select', editoptions: {value: '12:Stato1;24:Stato2'}, 
stype: 'select', searchoptions: {value: ':All;12:Stato1;24:Stato2'} 

一个属性的情况下,而不是valueeditoptions不能使用dataUrl

作为结果,您将能够用StatoTicketID数据填充栏Stato,但相应的文本将由jqGrid显示。

我建议你最好用纯粹的Stato文本实现第一种方式。您只能在服务器部件上解决所有问题。

+0

非常感谢Oleg!我会尝试第二种方式。我了解并分享您对我采用的解决方案的担忧,可能是因为我没有指定详细信息:“StatoTicketID”允许我根据给予“Stato”字段的“优先级”发出订单,因此纯文本排序顺序在我的情况下是不好的。 我将尝试第二种方式:我认为这是对我来说最好的解决方案。我会及时通知你的!非常感谢你! – Larry 2012-02-16 09:33:49

+0

@Larry:不客气!如果你使用'datatype:'json''而不加载':true',你可以实现服务器端的排序,这样即使在使用纯文本之后,你仍然可以继续使用'name:'Stato',index:'StatoTicketID' “Stato”列中的值。如果您选择第二种方式,那么您在编辑“Stato”列时将小心处理发送到服务器的数据。让我知道你是否会一直执行到最终的解决方案。 – Oleg 2012-02-16 09:44:20

+0

THX。我试图实现第一个解决方案,但它仍然不起作用。我已经使用过数据类型:'json'和loadonce:false ... pheraps必须修改你的解决方案吗? 我正在尝试第二个...我会让你更新,THX! – Larry 2012-02-16 09:58:20