public void TestParseFilterIntForValueLessThan() { MyFilteredBindingList <Product> myList = new MyFilteredBindingList <Product>(); SingleFilterInfo info = myList.ParseFilter("StockNo < 3"); Assert.AreEqual("StockNo", info.PropName); Assert.AreEqual(FilterOperator.LessThan, info.OperatorValue); Assert.AreEqual(3, info.CompareValue); }
public void TestParseFilterLongDateString() { MyFilteredBindingList <Product> myList = new MyFilteredBindingList <Product>(); SingleFilterInfo info = myList.ParseFilter("AddedDate = 5/6/2002 12:00:00 AM"); Assert.AreEqual("AddedDate", info.PropName); Assert.AreEqual(FilterOperator.EqualTo, info.OperatorValue); Assert.AreEqual(new DateTime(2002, 5, 6), info.CompareValue); }
public void TestParseFilterFloatForValueEqual() { MyFilteredBindingList <Font> myList = new MyFilteredBindingList <Font>(); SingleFilterInfo info = myList.ParseFilter("Size = 3"); Assert.AreEqual("Size", info.PropName); Assert.AreEqual(FilterOperator.EqualTo, info.OperatorValue); Assert.AreEqual(3.0F, info.CompareValue); }
public void TestParseFilterDateForValueGreaterThan() { MyFilteredBindingList <Product> myList = new MyFilteredBindingList <Product>(); SingleFilterInfo info = myList.ParseFilter("AddedDate > 5/6/2002"); Assert.AreEqual("AddedDate", info.PropName); Assert.AreEqual(FilterOperator.GreaterThan, info.OperatorValue); Assert.AreEqual(new DateTime(2002, 5, 6), info.CompareValue); }
public void TestParseFilterStringForValueEqualQuotes() { MyFilteredBindingList <Product> myList = new MyFilteredBindingList <Product>(); SingleFilterInfo info = myList.ParseFilter("Category = 'Something'"); Assert.AreEqual("Category", info.PropName); Assert.AreEqual(FilterOperator.EqualTo, info.OperatorValue); Assert.AreEqual("Something", info.CompareValue); }
internal void ApplyFilter(SingleFilterInfo filterParts) { List <T> results; // Check to see if the property type we are filtering by implements // the IComparable interface. Type interfaceType = TypeDescriptor.GetProperties(typeof(T))[filterParts.PropName] .PropertyType.GetInterface("IComparable"); if (interfaceType == null) { throw new InvalidOperationException("Filtered property" + " must implement IComparable."); } results = new List <T>(); // Check each value and add to the results list. foreach (T item in this) { IComparable compareValue = filterParts.PropDesc.GetValue(item) as IComparable; if (compareValue != null) { if (filterParts.OperatorValue == "%LIKE%" && (compareValue + "").ToLower().Contains((filterParts.CompareValue + "").ToLower())) { results.Add(item); } else { int result = compareValue.CompareTo(filterParts.CompareValue); if (filterParts.OperatorValue == "=" && result == 0) { results.Add(item); } else if (filterParts.OperatorValue == ">" && result > 0) { results.Add(item); } else if (filterParts.OperatorValue == "<" && result < 0) { results.Add(item); } } } } this.ClearItems(); foreach (T itemFound in results) { this.Add(itemFound); } }
public void TestApplyFilterStringEquals() { MyFilteredBindingList <Product> myList = new MyFilteredBindingList <Product>(); myList.Add(new Product("Gadgets", "TickTock", 56000, new DateTime(2002, 5, 6))); myList.Add(new Product("Games", "TickTock", 56000, new DateTime(2002, 5, 6))); myList.Add(new Product("Gadgets", "Jumper", 56000, new DateTime(2002, 5, 6))); myList.Add(new Product("Games", "Jumper", 56000, new DateTime(2002, 5, 6))); SingleFilterInfo info = myList.ParseFilter("Category = 'Gadgets'"); myList.ApplyFilter(info); Assert.AreEqual(myList.Count, 2); }
internal SingleFilterInfo ParseFilter(string filterPart) { SingleFilterInfo filterInfo = new SingleFilterInfo(); filterInfo.OperatorValue = DetermineFilterOperator(filterPart); string[] filterStringParts = filterPart.Split(filterInfo.OperatorValue.ToCharArray()).Where(p => !string.IsNullOrEmpty(p)).ToArray(); filterInfo.PropName = filterStringParts[0].Replace("[", ""). Replace("]", "").Replace(" AND ", "").Trim(); // Get the property descriptor for the filter property name. PropertyDescriptor filterPropDesc = TypeDescriptor.GetProperties(typeof(T))[filterInfo.PropName]; // Convert the filter compare value to the property type. if (filterPropDesc == null) { throw new InvalidOperationException("Specified property to " + "filter " + filterInfo.PropName + " on does not exist on type: " + typeof(T).Name); } filterInfo.PropDesc = filterPropDesc; string comparePartNoQuotes = StripOffQuotes(filterStringParts[1]); try { TypeConverter converter = TypeDescriptor.GetConverter(filterPropDesc.PropertyType); filterInfo.CompareValue = converter.ConvertFromString(comparePartNoQuotes); } catch (NotSupportedException) { throw new InvalidOperationException("Specified filter" + "value " + comparePartNoQuotes + " can not be converted" + "from string. Implement a type converter for " + filterPropDesc.PropertyType.ToString()); } return(filterInfo); }