private void ApplyCustomFilter <T>(T value, XLFilterOperator op, Func <Object, Boolean> condition) where T : IComparable <T> { _autoFilter.Filters[_column].Add(new XLFilter { Value = value, Operator = op, Connector = _connector, Condition = condition }); using (var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount())) { foreach (IXLRangeRow row in rows) { if (_connector == XLConnector.And) { if (!row.WorksheetRow().IsHidden) { if (condition(row.Cell(_column).GetValue <T>())) { row.WorksheetRow().Unhide().Dispose(); } else { row.WorksheetRow().Hide().Dispose(); } } } else if (condition(row.Cell(_column).GetValue <T>())) { row.WorksheetRow().Unhide().Dispose(); } } } }
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)); }
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)); }
public XLFilter(XLFilterOperator op = XLFilterOperator.Equal) { Operator = op; }