jQWidgets Forums
jQuery UI Widgets › Forums › Grid › Issues applying more than one filter
Tagged: datefilter, filter, grid, jqxgrid
This topic contains 7 replies, has 2 voices, and was last updated by naatha 12 years, 2 months ago.
-
Author
-
Hello,
I have drop down list which contains different filters, filter1, filter2 …
And also i set
showfilterrow: true
filterable: true
When i select filter1 from the drop down list, i get 160 records out of 1500 records. Now i want to search for some one whose first name start with P with in the 160 records.
When i type P in the filter row (text box under the First Name column header), it over write the existing filter1 and use all the 1500 records instead of 160 records.
What i want is to keep the filter selected from the drop down list while applying other filter in the filter row.
Could you please help me to achieve this?
Thank you
Hello naatha,
Please update to the latest version of jQWidgets (2.8) and share if you still experience the reported issue after that.
Best Regards,
DimitarjQWidgets team
http://www.jqwidgets.com/Hi Dimitar,
I have updated to latest version.
I am using the following function filter function:
var addfilter = function (columnname) {
$(“#jqxgrid”).jqxGrid(‘clearfilters’);
if (columnname == ”) return;
var filtergroup = new $.jqx.filter();
var filter_or_operator = 1;
var filtervalue = ”;
var filtercondition = ‘not_empty’;
var filter1 = filtergroup.createfilter(‘stringfilter’, filtervalue, filtercondition);
filtergroup.addfilter(filter_or_operator, filter1);
$(“#jqxgrid”).jqxGrid(‘addfilter’, columnname, filtergroup);
$(“#jqxgrid”).jqxGrid(‘applyfilters’);
}when the column type is string, int works fine. But failed for date type.
Used to work fine with version 2.7.
Do i need to change anything?
Thanks
Hi naatha,
Could you please provide us with a larger code sample, including your source definition and your grid initialization? Remember to format your code as explained in the forum topic Code Formatting.
Best Regards,
DimitarjQWidgets team
http://www.jqwidgets.com/Hi Dimitar,
I have just found out –
when i set showfilterrow: false, it works.
when i set showfilterrow: true, get the following error message:
Unhandled exception at line 7, column 14438 in http://localhost:64535/jqwidgets/jqxgrid.filter.js
0x800a138f – JavaScript runtime error: Unable to get property ‘filtervalue’ of undefined or null reference
thanks
Hi Dimitar,
Here is the code sample.
When i select the Filter1 – Date, i am getting the error with v 2.8 (worked fine with v 2.7)
My real problem with v 2.7 is:
Say i have 10 empty values in Ship Date column out of 100 rows.
When i select the Filter1-Date, the grid only displays 90 rows where the date is non-empty.
After that when i use the filterrow to search some one, it overwrite the existing filter.
How can i avoid this?
Thanks in advance.
<!DOCTYPE html><html lang="en"><head> <title id='Description'></title> <link rel="stylesheet" href="jqwidgets/styles/jqx.base.css" type="text/css" /> <link rel="stylesheet" href="jqwidgets/styles/jqx.summer.css" type="text/css" /> <script type="text/javascript" src="scripts/jquery-1.8.3.min.js"></script> <script type="text/javascript" src="jqwidgets/jqxcore.js"></script> <script type="text/javascript" src="jqwidgets/jqxbuttons.js"></script> <script type="text/javascript" src="jqwidgets/jqxscrollbar.js"></script> <script type="text/javascript" src="jqwidgets/jqxmenu.js"></script> <script type="text/javascript" src="jqwidgets/jqxgrid.js"></script> <script type="text/javascript" src="jqwidgets/jqxgrid.sort.js"></script> <script type="text/javascript" src="jqwidgets/jqxgrid.filter.js"></script> <script type="text/javascript" src="jqwidgets/jqxgrid.selection.js"></script> <script type="text/javascript" src="jqwidgets/jqxgrid.pager.js"></script> <script type="text/javascript" src="jqwidgets/jqxgrid.columnsresize.js"></script> <script type="text/javascript" src="jqwidgets/jqxdata.js"></script> <script type="text/javascript" src="jqwidgets/jqxpanel.js"></script> <script type="text/javascript" src="jqwidgets/jqxcheckbox.js"></script> <script type="text/javascript" src="jqwidgets/jqxlistbox.js"></script> <script type="text/javascript" src="jqwidgets/jqxdropdownlist.js"></script> <script type="text/javascript" src="jqwidgets/jqxgrid.columnsresize.js"></script> <script type="text/javascript" src="jqwidgets/jqxgrid.columnsreorder.js"></script> <script type="text/javascript" src="jqwidgets/jqxnumberinput.js"></script> <script type="text/javascript" src="jqwidgets/jqxcalendar.js"></script> <script type="text/javascript" src="jqwidgets/jqxdatetimeinput.js"></script> <script type="text/javascript" src="jqwidgets/globalization/jquery.global.js"></script> <script type="text/javascript" src="jqwidgets/jqxcombobox.js"></script> <script type="text/javascript" src="jqwidgets/jqxradiobutton.js"></script> <script type="text/javascript" src="jqwidgets/jqxgrid.storage.js"></script> <script type="text/javascript" src="jqwidgets/jqxwindow.js"></script> <script type="text/javascript" src="Scripts/generatedata.js"></script> <script type="text/javascript"> $(document).ready(function () { var theme = "summer"; var ddlsource = [ "Select a filter ...", "Filter1 - Date", "Filter2 - First Name", "Filter3 - Quantity", ]; $("#jqxWidget1").jqxDropDownList({ source: ddlsource, selectedIndex: 0, width: '200', height: '25', theme: theme, openDelay: 500, closeDelay: 750, animationType: 'none', autoDropDownHeight: true }); $('#jqxWidget1').on('select', function (event) { var args = event.args; if (args) { var index = args.index; if (index == 0) { addfilter(''); } else if (index == 1) { addfilter('date'); $("#jqxgrid").jqxGrid('sortby', 'date', 'desc'); } else if (index == 2) { addfilter('firstname'); $("#jqxgrid").jqxGrid('sortby', 'firstname', 'desc'); } else if (index == 3) { addfilter('quantity'); $("#jqxgrid").jqxGrid('sortby', 'quantity', 'desc'); } } }); var addfilter = function (columnname) { $("#jqxgrid").jqxGrid('clearfilters'); if (columnname == '') return; var filtergroup = new $.jqx.filter(); var filter_or_operator = 1; var filtervalue = ''; var filtercondition = 'not_empty'; var filter1 = filtergroup.createfilter('stringfilter', filtervalue, filtercondition); filtergroup.addfilter(filter_or_operator, filter1); $("#jqxgrid").jqxGrid('addfilter', columnname, filtergroup); $("#jqxgrid").jqxGrid('applyfilters'); } // prepare the data var data = generatedata(100); var source = { localdata: data, datatype: "array", cache: false, datafields: [ { name: 'id', type: 'number' }, { name: 'firstname', type: 'string' }, { name: 'lastname', type: 'string' }, { name: 'productname', type: 'string' }, { name: 'available', type: 'bool' }, { name: 'date', type: 'date', format: 'dd/MM/yyyy' }, { name: 'quantity', type: 'number' }, { name: 'price', type: 'number' } ] }; var dataAdapter = new $.jqx.dataAdapter(source); // initialize jqxGrid $("#jqxgrid").jqxGrid( { width: '1000', source: dataAdapter, theme: theme, selectionmode: 'singlerow', sortable: true, showfilterrow: true, sorttogglestates: 2, filterable: true, altrows: true, pageable: true, autoheight: true, columnsresize: true, autoshowfiltericon: true, showsortmenuitems: false, columnsresize: true, columnsreorder: false, pagesizeoptions: ['5', '10', '15', '20', '25'], enabletooltips: true, showstatusbar: true, columns: [ { text: 'ID', datafield: 'id', width: 50, cellsalign: 'center', align: 'center' }, { text: 'First Name', datafield: 'firstname', width: 150, cellsalign: 'center', align: 'center', filtercondition: 'starts_with' }, { text: 'Last Name', datafield: 'lastname', width: 150, cellsalign: 'center', align: 'center', filtercondition: 'starts_with' }, { text: 'Product', datafield: 'productname', width: 200, cellsalign: 'center', align: 'center', filtercondition: 'starts_with' }, { text: 'Available', datafield: 'available', columntype: 'checkbox', width: 100, cellsalign: 'center', align: 'center' }, { text: 'Ship Date', datafield: 'date', width: 150, cellsalign: 'center', align: 'center', cellsformat: 'yyyy-MM-dd', filtertype: 'date' }, { text: 'Quantity', datafield: 'quantity', width: 100, cellsalign: 'center', align: 'center' }, { text: 'Price', datafield: 'price', width: 100, cellsalign: 'center', align: 'center', cellsformat: 'c2' } ] }); }); </script></head><body class='default'> <div id='jqxWidget1' style="float: left; margin-left: 75px; margin-right: 25px; margin-top: 30px; margin-bottom: 30px"> </div> <div id='jqxWidget' style="margin-left: 75px; margin-bottom: 30px; margin-top: 30px"> <div id="jqxgrid"></div> </div> </body></html>
Hi naatha,
Here is a working example, using version 2.8:
<!DOCTYPE html><html lang="en"><head> <title id='Description'></title> <link rel="stylesheet" href="../../jqwidgets/styles/jqx.base.css" type="text/css" /> <link rel="stylesheet" href="../../jqwidgets/styles/jqx.summer.css" type="text/css" /> <script type="text/javascript" src="../../scripts/jquery-1.9.1.min.js"></script> <script type="text/javascript" src="../../../../jqwidgets/jqxcore.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxbuttons.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxscrollbar.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxmenu.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxgrid.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxgrid.sort.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxgrid.filter.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxgrid.selection.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxgrid.pager.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxgrid.columnsresize.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxdata.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxpanel.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxcheckbox.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxlistbox.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxdropdownlist.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxgrid.columnsresize.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxgrid.columnsreorder.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxnumberinput.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxcalendar.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxdatetimeinput.js"></script> <script type="text/javascript" src="../../jqwidgets/globalization/jquery.global.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxcombobox.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxradiobutton.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxgrid.storage.js"></script> <script type="text/javascript" src="../../jqwidgets/jqxwindow.js"></script> <script type="text/javascript" src="../../../demos/jqxgrid/generatedata.js"></script> <script type="text/javascript"> $(document).ready(function () { var theme = "summer"; var ddlsource = [ "Select a filter ...", "Filter1 - Date", "Filter2 - First Name", "Filter3 - Quantity", ]; $("#jqxWidget1").jqxDropDownList({ source: ddlsource, selectedIndex: 0, width: '200', height: '25', theme: theme, openDelay: 500, closeDelay: 750, animationType: 'none', autoDropDownHeight: true }); $('#jqxWidget1').on('select', function (event) { var args = event.args; if (args) { var index = args.index; if (index == 0) { addfilter(''); } else if (index == 1) { addfilter('date'); $("#jqxgrid").jqxGrid('sortby', 'date', 'desc'); } else if (index == 2) { addfilter('firstname'); $("#jqxgrid").jqxGrid('sortby', 'firstname', 'desc'); } else if (index == 3) { addfilter('quantity'); $("#jqxgrid").jqxGrid('sortby', 'quantity', 'desc'); } } }); var addfilter = function (columnname) { $("#jqxgrid").jqxGrid('clearfilters'); if (columnname == '') { return; } else if (columnname == "date") { var filtergroup = new $.jqx.filter(); var filter_or_operator = 1; var d1 = new Date(2013, 06, 01); var filtervalue1 = d1; var filtercondition1 = 'less_than'; var filter1 = filtergroup.createfilter('datefilter', filtervalue1, filtercondition1); var d2 = new Date(2013, 01, 01); var filtervalue2 = d2; var filtercondition2 = 'greater_than'; var filter2 = filtergroup.createfilter('datefilter', filtervalue2, filtercondition2); filtergroup.addfilter(filter_or_operator, filter1); filtergroup.addfilter(filter_or_operator, filter2); $("#jqxgrid").jqxGrid('addfilter', columnname, filtergroup); $("#jqxgrid").jqxGrid('applyfilters'); } else if (columnname == "firstname" || columnname == "quantity") { var filtergroup = new $.jqx.filter(); var filter_or_operator = 1; var filtervalue = ''; var filtercondition = 'not_empty'; var filter1 = filtergroup.createfilter('stringfilter', filtervalue, filtercondition); filtergroup.addfilter(filter_or_operator, filter1); $("#jqxgrid").jqxGrid('addfilter', columnname, filtergroup); $("#jqxgrid").jqxGrid('applyfilters'); }; } // prepare the data var data = generatedata(100); var source = { localdata: data, datatype: "array", cache: false, datafields: [ { name: 'id', type: 'number' }, { name: 'firstname', type: 'string' }, { name: 'lastname', type: 'string' }, { name: 'productname', type: 'string' }, { name: 'available', type: 'bool' }, { name: 'date', type: 'date', format: 'dd/MM/yyyy' }, { name: 'quantity', type: 'number' }, { name: 'price', type: 'number' } ] }; var dataAdapter = new $.jqx.dataAdapter(source); // initialize jqxGrid $("#jqxgrid").jqxGrid( { width: '1000', source: dataAdapter, theme: theme, selectionmode: 'singlerow', sortable: true, showfilterrow: true, sorttogglestates: 2, filterable: true, altrows: true, pageable: true, autoheight: true, columnsresize: true, autoshowfiltericon: true, showsortmenuitems: false, columnsresize: true, columnsreorder: false, pagesizeoptions: ['5', '10', '15', '20', '25'], enabletooltips: true, showstatusbar: true, columns: [ { text: 'ID', datafield: 'id', width: 50, cellsalign: 'center', align: 'center' }, { text: 'First Name', datafield: 'firstname', width: 150, cellsalign: 'center', align: 'center', filtercondition: 'starts_with' }, { text: 'Last Name', datafield: 'lastname', width: 150, cellsalign: 'center', align: 'center', filtercondition: 'starts_with' }, { text: 'Product', datafield: 'productname', width: 200, cellsalign: 'center', align: 'center', filtercondition: 'starts_with' }, { text: 'Available', datafield: 'available', columntype: 'checkbox', width: 100, cellsalign: 'center', align: 'center' }, { text: 'Ship Date', datafield: 'date', width: 150, cellsalign: 'center', align: 'center', cellsformat: 'yyyy-MM-dd' }, { text: 'Quantity', datafield: 'quantity', width: 100, cellsalign: 'center', align: 'center' }, { text: 'Price', datafield: 'price', width: 100, cellsalign: 'center', align: 'center', cellsformat: 'c2' } ] }); }); </script></head><body class='default'> <div id='jqxWidget1' style="float: left; margin-left: 75px; margin-right: 25px; margin-top: 30px; margin-bottom: 30px"> </div> <div id='jqxWidget' style="margin-left: 75px; margin-bottom: 30px; margin-top: 30px"> <div id="jqxgrid"> </div> </div></body></html>
Best Regards,
DimitarjQWidgets team
http://www.jqwidgets.com/Thanks Dimitar and it works fine.
-
AuthorPosts
You must be logged in to reply to this topic.