我的要求是显示一个包含多个过滤器的页面以应用于网格数据.
假设我们正在谈论订单,订单具有以下属性
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当用户单击复选框时添加当前状态(如果有)有没有办法做到这一点?
我看到在这段代码中,您可以在javascript中预设postdata过滤器.
postData: {
filters:'{"groupOp":"AND","rules":['+
'{"field":"invdate","op":"gt","data":"2007-09-06"},'+
'{"field":"invdate","op":"lt","data":"2007-10-04"},'+
'{"field":"name","op":"bw","data":"test"}]}'
}
Run Code Online (Sandbox Code Playgroud)
是否有任何API可以让你建立它.就像是:
jqgrid("#grid").addPostDataFilters("AND");
jqgrid("#grid").addFilteritem("field", "cn", "value");
jqgrid("#grid").addFilteritem("field1", "eq", "value2");
Run Code Online (Sandbox Code Playgroud)
帮助生成顶部postdata过滤器代码??
我试过这个,但它似乎不起作用:
.jqGrid("setGridParam", { editurl: "/Project/UpdateMe",
ondblClickRow: function (rowid) {
editProject(rowid); // window.location.href="/Project/Detail/"+rowid;
}
});
var grid = $("#grid");
var f = { groupOp: "AND", rules: [] };
f.rules.push({ field: "Name", op: "cn", data: "volat" });
grid.p.search = f.rules.length > 0;
$.extend(grid.p.postData, { filters: JSON.stringify(f) });
Run Code Online (Sandbox Code Playgroud)
我现在有这个工作(感谢Oleg)但是,如果某个原因,查找按钮有些空白(即使我认为我有一个高级过滤器设置)我添加了一张图片

我找到了许多接近我需要的讨论,这个问题是最接近的 - 如何在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函数,然后点击按钮 - 一切正常; 但我需要让它在"页面重新加载"上工作!
有任何想法吗?这让我疯狂...
现在,我必须单击jqGrid搜索图标以弹出搜索框.我想要做的是始终在网格上方(而不是弹出窗口)打开搜索框.我在他们的演示中没有看到任何东西,但我希望有人已经完成它或知道如何.