c# - Multiple Filters not working in DataGrid WPF -
my databinding works fine in datagrid, when try collectionview collectionviewsource, null, , filter in datagrid not work. here code:
<window.resources> <collectionviewsource x:key="jobitemviewsource" d:designsource="{d:designinstance my:jobitem, createlist=true}"/> </window.resources> <grid visibility="visible" showgridlines="false" uselayoutrounding="true" datacontext="{staticresource jobitemviewsource}"> <datagrid grid.row="4" grid.columnspan="6" loadingrow="jobitemdatagrid_loadingrow" itemssource="{binding}" name="jobitemdatagrid" rowdetailsvisibilitymode="visiblewhenselected" isreadonly="true" issynchronizedwithcurrentitem="true" autogeneratecolumns="false" grid.rowspan="2"> <datagrid.columns> <datagridtextcolumn x:name="workordernocolumn" binding="{binding path=workorderno}" header="work order no." width="75" /> <datagridtextcolumn x:name="assigneecolumn" binding="{binding path=primaryassignee}" header="assignee" width="80" /> <datagridtextcolumn x:name="datereceivedcolumn" binding="{binding path=datereceived}" header="date received" width="90" /> <datagridtextcolumn x:name="duedatecolumn" binding="{binding path=duedate}" header="due date" width="90" /> <datagridtextcolumn x:name="statuscolumn" binding="{binding path=status}" header="status" width="70" /> </datagrid.columns> </datagrid> <checkbox content="show active jobs" name="actjobscheckbox" grid.column="1" grid.columnspan="2" grid.row="3" horizontalalignment="center" verticalalignment="center" checked="addfiltering" unchecked="removefiltering"/> <checkbox content="show completed jobs" name="compjobscheckbox" grid.column="3" grid.columnspan="3" grid.row="3" horizontalalignment="center" verticalalignment="center" checked="addfiltering" unchecked="removefiltering"/> </grid> in code behind, have following:
public partial class adminview : window { observablecollection <jobitem> jobitemlist = new observablecollection<jobitem>(); collectionviewsource jobitemviewsource = new collectionviewsource(); icollectionview view; mainwindow parent; employee curremployee; groupfilter filterlist = new groupfilter(); public adminview(mainwindow parent, employee curremployee) { this.parent = parent; this.curremployee = curremployee; initializecomponent(); jobitemdatagrid.datacontext = jobitemlist; jobitemviewsource = (collectionviewsource)(this.resources[jobitemviewsource]); view = collectionviewsource.getdefaultview(jobitemdatagrid); } private void addfiltering(object sender, routedeventargs args) { checkbox check = sender checkbox; predicate<object> active = new predicate<object>(containsactive); predicate<object> completed = new predicate<object>(containscomp); switch (check.name) { case "actjobscheckbox": filterlist.addfilter(active); if( view != null) view.filter = filterlist.filter; break; case "compjobscheckbox": filterlist.addfilter(completed); if (view != null) view.filter = filterlist.filter; break; } } private void removefiltering(object sender, routedeventargs args) { checkbox check = sender checkbox; predicate<object> active = new predicate<object>(containsactive); predicate<object> completed = new predicate<object>(containscomp); switch (check.name) { case "actjobscheckbox": filterlist.removefilter(active); break; case "compjobscheckbox": filterlist.removefilter(completed); break; } } public bool containsactive(object de) { jobitem item = de jobitem; return (item.status != "completed"); } public bool containscomp(object de) { jobitem item = de jobitem; return (item.status == "completed"); }
i have figured out own answer, needed refresh view , works.
Comments
Post a Comment