asp.net – jqGrid:使用多种方法来过滤数据
|
我的要求是显示具有多个过滤器的页面以应用于网格数据. 假设我们在谈论订单,订单有以下属性 public class Order {
public int OrderID
public DateTime OrderDate
public DateTime ShipmentDate
public int OrderTotal
public int OrderStatus
}
在jqgrid对象中,我显示除OrderStatus之外的所有属性 要求是创建一个视图 >左侧的jqGrid 在右侧面板中,用户将看到一个表示每个可能的OrderStatus值的复选框列表,并且他想使用两种方法进行搜索(例如选中“已发货的订单”复选框,然后使用Amount大于值的过滤网格) 我已经在jqGrid对象内部配置了高级过滤(multiplesearch:true),我可以创建复合过滤器来组合字段和逻辑运算符. 任何有关如何在用户按搜索按钮时甚至可以从右侧面板提交数据的想法? 更新1: 序言:Oleg样品太棒了,但不幸的是不符合我的客户要求:( @Oleg:我不明白你为什么这么认为:
也许我的描述不是很清楚,但我不会显示任何订单的细节.为了更好地阐明我的要求,我修改了您的示例,向您展示所需的最终UI,如下图所示: 客户想要使用两种方法或两者一起过滤网格中的数据: >使用网格本身提供的多重搜索功能(感谢解决方案提及) 从功能的角度来看,要求很容易表达:当用户单击复选框或使用本机多重搜索进行搜索时,我应该将值发布到服务器,包括复选框状态. 总结一下我应该: >添加通过本机multiplesearch进行帖子时的复选框状态 有没有办法做到这一点? 解决方法我理解这个要求非常好.在这种情况下,我使用了jqGrid内的复选框.让jqGrid中的信息最有利的不仅仅是简单搜索的可能性.如果数据在网格之外,您将只显示所选行的右窗格中的订单详细信息.所以用户对这些数据的概述还不是很好.为了能够在表中放置许多复选框,而不需要永久的水平滚动,我旋转了具有“Vertical text inside table headers using a JavaScript-based SVG library”中描述的技术的复选框的列的标题.这种旋转在IE中看起来并不完美,但在其他浏览器中它的工作完美. 您可以将隐藏列中的OrderStatus字段中的数据保存起来,并将位掩码解码为布尔值,该值可在客户端或服务器端生成复选框. 因为使用想要使用multiplesearch:true我不得不提到jQuery.clone中的一个错误,跟随jqGrid在所有版本的IE浏览器中的多搜索的错误.如果您定义更多的一个搜索过滤器,则只使用第一个搜索过滤器,因为所有其他过滤器的操作字段将被读取为未定义.可惜的是,jQuery 1.4.3中的bug也没有修复刚才发布.为了能够使用multiplesearch:true,您可以使用Jiho Han on trirand.com forum的解决方法建议. 所有在一起,您可以看到在the demo example生产电网 在哪里可以搜索多个字段 相应的代码: var myData = [
{ orderID: "10",orderDate: "2010-09-18",shipmentDate: "2010-09-20",orderStatus: "2" },{ orderID: "15",orderDate: "2010-09-20",shipmentDate: "2010-09-24",orderStatus: "3" },{ orderID: "20",orderDate: "2010-10-16",shipmentDate: "2010-10-17",orderStatus: "1" }
];
// decode 'orderStatus' column and add additional boolean data based on the bitmap mask
for (var i=0,l=myData.length; i<l; i++) {
var myRow = myData[i];
var orderStatus = parseInt(myRow.orderStatus,10);
myRow.airPost = (orderStatus & 2) != 0? "1": "0";
myRow.heavy = (orderStatus & 1) != 0? "1": "0";
}
var grid = jQuery('#list');
grid.jqGrid({
data: myData,datatype: 'local',caption: 'Order Details',height: 'auto',gridview: true,rownumbers: true,viewrecords: true,pager: '#pager',colNames: ['Order ID','Order','Shipment','Air-Post','Heavy','RowVersion'],colModel: [
{ name: 'orderID',index: 'orderID',key:true,width: 120,sorttype: 'int' },{ name: 'orderDate',index: 'orderDate',width: 180,sorttype: 'date',formatter: 'date' },{ name: 'shipmentDate',index: 'shipmentDate',{ name: 'airPost',width: 21,index: 'airPost',formatter: 'checkbox',align: 'center',editoptions: { value: "1:0" },stype: 'select',searchoptions: { value: "1:Yes;0:No" } },{ name: 'heavy',index: 'heavy',stype: "select",{ name: 'orderStatus',index: 'orderStatus',width: 50,hidden: true }
]
}).jqGrid ('navGrid','#pager',{ edit: false,add: false,del: false,refresh: true,view: false },{},{multipleSearch:true})
.jqGrid ('navButtonAdd',{ caption: "",buttonicon: "ui-icon-calculator",title: "choose columns",onClickButton: function() {
grid.jqGrid('columnChooser');
}
});
其中rotateCheckboxColumnHeaders和高级搜索中的修补程序定义如此 // we use workaround from http://www.trirand.com/blog/?page_id=393/bugs/in-multiple-search-second-and-subsequent-ops-are-sent-as-undefined-in-ie6/
// to fix the bug in the jQuery.clone (see http://bugs.jquery.com/ticket/6793 and
// dscussion on the http://api.jquery.com/clone/
jQuery.event.special.click = {
setup: function() {
if (jQuery(this).hasClass("ui-search")) {
jQuery(this).bind("click",jQuery.event.special.click.handler);
}
return false;
},teardown: function() {
jQuery(this).unbind("click",jQuery.event.special.click.handler);
return false;
},handler: function(event) {
jQuery(".ui-searchFilter td.ops select").attr("name","op");
}
};
var rotateCheckboxColumnHeaders = function (grid,headerHeight) {
// we use grid as context (if one have more as one table on tnhe page)
var trHead = jQuery("thead:first tr",grid.hdiv);
var cm = grid.getGridParam("colModel");
jQuery("thead:first tr th").height(headerHeight);
headerHeight = jQuery("thead:first tr th").height();
for (var iCol = 0; iCol < cm.length; iCol++) {
var cmi = cm[iCol];
if (cmi.formatter === 'checkbox') {
// we must set width of column header div BEFOR adding class "rotate" to
// prevent text cutting based on the current column width
var headDiv = jQuery("th:eq(" + iCol + ") div",trHead);
headDiv.width(headerHeight).addClass("rotate");
if (!jQuery.browser.msie) {
if (jQuery.browser.mozilla) {
headDiv.css("left",(cmi.width - headerHeight) / 2 + 3).css("bottom",7);
}
else {
headDiv.css("left",(cmi.width - headerHeight) / 2);
}
}
else {
var ieVer = jQuery.browser.version.substr(0,3);
// Internet Explorer
if (ieVer !== "6.0" && ieVer !== "7.0") {
jQuery("span",headDiv).css("left",0);
headDiv.css("left",cmi.width / 2 - 4).css("bottom",headerHeight / 2);
}
else {
headDiv.css("left",3);
}
headDiv.parent().css("zoom",1);
}
}
}
};
如果您更喜欢将复选框保留在网格外,则可以对onSelectRow事件处理程序内的位掩码OrderStatus进行解码. 更新:我一开始就误以为你的要求.看看modified example.现在看起来像 它更接近你所需要的. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在我正在运行的Visual Studio 2013中的另一
- asp.net-mvc – mvc razor @helper可以返回非编码标签吗?
- asp.net – 控制权限的最佳做法?
- asp.net – 什么是LiteralControl?为什么使用
- asp.net – Internet Explorer 9中的URL查询字符串值的UTF-
- asp.net – 忽略在IIS中为代码400(错误请求)配置的自定义错
- asp.net – 表达式标记中的问题,用于绑定字符串变量
- asp.net – 如何绑定gridview中的下拉列表?
- asp.net – 更新ValidationSummary列表控件模糊?
- ASP.NET WebMethod返回包含在引号中的JSON
- asp.net – 实体框架4 – 从模型更新数据库模式
- 403发布asp.net MVC后禁止
- asp.net – 无法找到请求的.Net Framework数据提
- asp.net-mvc – Razor模板,views和angular.js
- 在Asp.Net Membership中手动更改用户名
- asp.net mvc中Forms身份验证身份验证流程
- asp.net-mvc – 使用CSVHelper将流输出到浏览器
- asp.net-mvc – 编译时mvc视图检查与msbuild
- asp.net-mvc – Html.Raw()在ASP.NET MVC Razor视
- 在ASP.NET中使用数据源控件真的很专业吗?
