我的要求是显示一个包含多个过滤器的页面以应用于网格数据.
假设我们正在谈论订单,订单具有以下属性
public class Order {
public int OrderID
public DateTime OrderDate
public DateTime ShipmentDate
public int OrderTotal
public int OrderStatus
}
Run Code Online (Sandbox Code Playgroud)
在jqgrid对象中,我显示除OrderStatus之外的所有属性
要求是创建一个具有的视图
在右侧面板中,用户将看到一个复选框列表,表示每个可能的OrderStatus值,并且他希望使用这两种方法进行搜索(例如,选中"已发货订单"复选框,然后使用大于某个值的金额过滤网格)
我已经multiplesearch:true在jqGrid对象中配置了高级过滤(),我可以创建组合字段和逻辑运算符的复杂过滤器.
有关如何在用户按下搜索按钮时从右侧面板提交数据的任何想法?
更新1:
序言:Oleg样品太棒了但不幸的是不符合我的客户要求:(
@Oleg:我不明白你为什么这么想:
如果数据位于网格之外,您将仅在选定行的右窗格中显示订单详细信息.因此,用户将不太了解数据.
也许我的描述不是那么清楚,但我不会显示任何订单细节.为了更好地阐明我的要求,我修改了您的示例,以显示所需的最终用户界面,如下图所示:

客户希望使用两种方法或两者同时过滤网格中的数据:
multiplesearch网格本身提供的设施(感谢提到的解决方法)从功能的角度来看,需求很容易表达:当用户单击复选框或使用本机进行搜索时,multiplesearch我应该将值发布到服务器,包括复选框状态.
总结一下,我应该:
multiplesearchmultiplesearch当用户单击复选框时添加当前状态(如果有)有没有办法做到这一点?
我找到了许多接近我需要的讨论,这个问题是最接近的 - 如何在jqGrid的请求中将postData._search设置为true?.
因为我正在努力解决几乎相同的问题,并且无法让它工作 - 我想在jqGrid的初始加载期间设置"搜索"和"过滤器" - 比如,在页面重新加载时,我有我的存储在会话中的过滤器 - 我尝试了我在Oleg的例子中找到的所有东西 - 它只是不起作用!
这就是我想要做的 -
loadBeforeSend: function (xhr) {
var grid = jQuery('#' + block_id);
var postData = grid.jqGrid('getGridParam','postData');
jQuery.extend(postData,{filters:MyFilters});
grid.jqGrid('setGridParam', {search: true, postData: postData});
console.log(grid.jqGrid('getGridParam','postData'));
}
Run Code Online (Sandbox Code Playgroud)
控制台打印输出显示过滤器已就位,但_search仍为false,即使没有过滤器,实际的Post也会被发送:
_search false
block_id report_block_1table
nd 1297451574526
page 1
rows 25
sidx id
sord desc
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用完全相同的代码 - 添加
grid.trigger("reloadGrid");
Run Code Online (Sandbox Code Playgroud)
line - 进入某个按钮的onClickButton函数,然后点击按钮 - 一切正常; 但我需要让它在"页面重新加载"上工作!
有任何想法吗?这让我疯狂...
目前我已启用网格设置并启用搜索.当我运行搜索时,一切正常,我可以将好数据返回到网格.我看到URL上的"_search"参数设置为"true",一切都很好.
但是,当完成搜索并且数据不再相关时,我想重新加载网格以显示那里的先前数据(初始页面加载上显示的数据).我做了一个函数来调用"trigger("reloadGrid")"方法,但是只发送相同的数据,而"_search"仍设置为"true".
有没有办法清除搜索请求数据,只是重新加载页面加载上显示的初始数据或至少将"_search"值设置回"false",以便我可以检查它?目前显示原始数据的唯一方法是重新加载页面.
我想通过JavaScript手动将搜索应用到我的jqGrid.我在这里尝试了一个指南,但似乎无法让它完全正常工作.在网格设置中,我有一个名为'error_column'的列,我想在搜索字符串'Test'时执行搜索.
这是我到目前为止:
var filter = { "field": "error_column", 'oper': 'eq', "data": 'Test' };
$("Grid2").jqGrid('setGridParam', { search: true, postData: { filters: filter} })
$("Grid2").trigger('reloadGrid');
Run Code Online (Sandbox Code Playgroud)
当我单击这个绑定的按钮时,没有任何反应,它不会导致错误.
编辑 以下是初始化网格的代码:
jQuery("#Grid2").jqGrid({
datatype: "local",
height: 250,
colNames: ['NewSubscriberID', 'Conflicting Subscriber ID', 'Error Field', 'Error Message'],
colModel: [
{ name: 'new_subscriber_id', index: 'new_subscriber_id', width: 120},
{ name: 'conflicting_subscriber_id', index: 'conflicting_subscriber_id', width: 170},
{ name: 'error_column', index: 'error_column', width: 90, sorttype: "text", search: true},
{ name: 'error_type', index: 'error_type', width: 145}
],
loadonce: true
}); …Run Code Online (Sandbox Code Playgroud) 虽然我已经能够以编程方式添加自己的帖子数据,但我似乎无法弄清楚如何_search: true在请求中发送此代码.
var data = grid.jqGrid("getGridParam", "postData");
data._search = true;
data.searchString = id.toString();
data.searchOper = "eq";
data.searchField = "userid";
grid.jqGrid("setGridParam", { "postData": data });
grid.trigger("reloadGrid");
Run Code Online (Sandbox Code Playgroud)
这些字段是正确添加的,但是_search的某处似乎设置为false,因为每个请求都将其设置为false.为了让它"真实",我还有其他一些事情需要做吗?我正在运行工具栏搜索,但大多数情况下,当调用此代码时,没有输入任何内容,并且我的服务器上的大量实用程序代码在处理搜索之前检查_search.