コード例 #1
0
 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();
             }
         }
     }
 }
コード例 #2
0
ファイル: XLFilterColumn.cs プロジェクト: wtf3505/ClosedXML
 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));
 }
コード例 #3
0
ファイル: XLFilterColumn.cs プロジェクト: zxcvas/ClosedXML
        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));
        }
コード例 #4
0
ファイル: XLFilter.cs プロジェクト: zhoushlu/ClosedXML
 public XLFilter(XLFilterOperator op = XLFilterOperator.Equal)
 {
     Operator = op;
 }
コード例 #5
0
ファイル: XLFilter.cs プロジェクト: hal1932/ClosedXML
 public XLFilter(XLFilterOperator op = XLFilterOperator.Equal)
 {
     Operator = op;
 }