c# - Object List View Highlight Renderer with Composite Filters -
i'm trying filter object list view composite filter (i.e. multiple filter conditions) default highlight text renderer renders text of first filter.
is there way make apply filters or better yet use multiple text renderers 1 each filter?
i'm using control characters (&& , ||) delimit search terms
some c&p code illustrate
public void filter (string txt, matchkind matchkind) { bool filterbyall; ienumerable<string> terms = splitsearchterms(txt, out filterbyall); list<imodelfilter> modelfilters = new list<imodelfilter>(); foreach (string term in terms) { imodelfilter filter; switch (matchkind) { case matchkind.contains: default: filter = textmatchfilter.contains(_olv, term); break; case matchkind.prefix: filter = textmatchfilter.prefix(_olv, term); break; case matchkind.regex: filter = textmatchfilter.regex(_olv, term); break; } modelfilters.add(filter); } compositefilter compositefilter; if (filterbyall) { compositefilter = new compositeallfilter(modelfilters); } else { compositefilter = new compositeanyfilter(modelfilters); } //only highlights text first filter highlighttextrenderer renderer = _olv.defaultrenderer highlighttextrenderer; if (renderer != null) { solidbrush brush = renderer.fillbrush solidbrush ?? new solidbrush(color.transparent); if (brush.color != color.lightseagreen) { brush.color = color.lightseagreen; renderer.fillbrush = brush; _olv.defaultrenderer = renderer; } } else { messagebox.show(@"renderer null!"); } _olv.modelfilter = compositefilter; }
this solution works me. multiple columns support still highlighting support.
var filters = new list<imodelfilter>(); textmatchfilter highlightingfilter = null; if (!string.isnullorempty(txtsearch.text)) { var words = txtsearch.text.trim().split(null); highlightingfilter = textmatchfilter.contains(listview, words); foreach (var word in words) { var filter = textmatchfilter.contains(listview, word); filters.add(filter); } } var compositefilter = new compositeallfilter(filters); listview.modelfilter = highlightingfilter; listview.additionalfilter = compositefilter; listview.defaultrenderer = new highlighttextrenderer(highlightingfilter);
Comments
Post a Comment