Introduction
In Iron Speed Designer, it is very easy to add a search filter above a table control. It is also very easy to config the filter to work in Equals, StartsWith, EndsWith or Contains mode. At design time, I always set search filters in Contains mode to get the most search power. At run-time, however, Contains mode sometimes returns too many hits. These are the times I wish I could double-quote the search text, and the filter would automatically switch to Equals mode.
This turns out to be a pretty straightforward customization.
This turns out to be a pretty straightforward customization.
Code customization
Use the following convention to define a search filter's operator:| Text | Operator |
|---|---|
| "search term" | Equals |
| "search term | StartsWith |
| search term" | EndsWith |
| search term | Contains |
Override the table control's CreateWhereClause() method. Find the code block that defines the search behavior. Insert the following code right before the WhereClause is declared.
var searchOp = BaseFilter.ComparisonOperator.Contains;
if (formatedSearchText.StartsWith("\"") && formatedSearchText.EndsWith("\"")) {
searchOp = BaseFilter.ComparisonOperator.EqualsTo;
formatedSearchText = formatedSearchText.Substring(1, formatedSearchText.Length - 2);
} else if (formatedSearchText.StartsWith("\"")) {
searchOp = BaseFilter.ComparisonOperator.Starts_With;
formatedSearchText = formatedSearchText.Substring(1);
} else if (formatedSearchText.EndsWith("\"")) {
searchOp = BaseFilter.ComparisonOperator.Ends_With;
formatedSearchText = formatedSearchText.Substring(0, formatedSearchText.Length - 1);
}Then replace the search operator in the WhereClause:
WhereClause search = new WhereClause(); search.iOR(CustomersTable.CustomerID, searchOp, formatedSearchText, true, false); search.iOR(CustomersTable.CompanyName, searchOp, formatedSearchText, true, false); search.iOR(CustomersTable.EmailAddress, searchOp, formatedSearchText, true, false); search.iOR(CustomersTable.City, searchOp, formatedSearchText, true, false); search.iOR(CustomersTable.Region, searchOp, formatedSearchText, true, false); search.iOR(CustomersTable.PostalCode, searchOp, formatedSearchText, true, false);
Conclusion
Now you have a smart search filter.
No comments:
Post a Comment