private IXLFilterConnector ApplyCustomFilter <T>(T value, XLFilterOperator op, Func <Object, Boolean> condition, XLFilterType filterType = XLFilterType.Custom) where T : IComparable <T> { _autoFilter.IsEnabled = true; if (filterType == XLFilterType.Custom) { Clear(); _autoFilter.Filters.Add(_column, new List <XLFilter> { new XLFilter { Value = value, Operator = op, Connector = XLConnector.Or, Condition = condition } }); } else { if (_autoFilter.Filters.TryGetValue(_column, out List <XLFilter> filterList)) { filterList.Add(new XLFilter { Value = value, Operator = op, Connector = XLConnector.Or, Condition = condition }); } else { _autoFilter.Filters.Add(_column, new List <XLFilter> { new XLFilter { Value = value, Operator = op, Connector = XLConnector.Or, Condition = condition } }); } } _autoFilter.Column(_column).FilterType = filterType; _autoFilter.Reapply(); return(new XLFilterConnector(_autoFilter, _column)); }
public IXLFilterColumn SetFilterType(XLFilterType value) { FilterType = value; return(this); }
private IXLFilterConnector ApplyCustomFilter <T>(T value, XLFilterOperator op, Func <Object, Boolean> condition, XLFilterType filterType = XLFilterType.Custom) where T : IComparable <T> { _autoFilter.Enabled = true; if (filterType == XLFilterType.Custom) { Clear(); _autoFilter.Filters.Add(_column, new List <XLFilter> { new XLFilter { Value = value, Operator = op, Connector = XLConnector.Or, Condition = condition } }); } else { List <XLFilter> filterList; if (_autoFilter.Filters.TryGetValue(_column, out filterList)) { filterList.Add(new XLFilter { Value = value, Operator = op, Connector = XLConnector.Or, Condition = condition }); } else { _autoFilter.Filters.Add(_column, new List <XLFilter> { new XLFilter { Value = value, Operator = op, Connector = XLConnector.Or, Condition = condition } }); } } _autoFilter.Column(_column).FilterType = filterType; Boolean isText = typeof(T) == typeof(String); var ws = _autoFilter.Range.Worksheet as XLWorksheet; ws.SuspendEvents(); var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount()); foreach (IXLRangeRow row in rows) { Boolean match = isText ? condition(row.Cell(_column).GetString()) : row.Cell(_column).DataType == XLCellValues.Number && condition(row.Cell(_column).GetDouble()); if (match) { row.WorksheetRow().Unhide(); } else { row.WorksheetRow().Hide(); } } ws.ResumeEvents(); return(new XLFilterConnector(_autoFilter, _column)); }