When working with large sets of hierarchical data sometimes you need to provide some sort a cascade filter mechanism. For instance, in a travel agency system, you may want to be able to select a destination, like country or a region, and based on that selection, get some data sets with travel options such as hotel deals, car rentals, and so on….
Continuing with our example (products and categories) I’ll create a dialog with two autocompletes. One will give you whole list of categories and the other a filtered set of products based on the selected category.
Doing this is not so hard but requires a bit of an explanation.
*In this post I’ll be using a nice C#’s feature called partial application. If you don’t know what does this means, don’t worry; just look at it as a magical lambda ;).
When configuring an Autocomplete it’s possible to specify a function to be executed every time the selection changes, this can be done by using the NRapid’s fluent API, and we are going to use this feature to get the selected category and then use that category to filter the list of products.
The code looks something like this:
* If you are not familiar with functional programming this code will look a little odd,....and well..., it is ;)
This code updates the "cat" variable every time the selected category changes and passes it to the method productsByCategory which is wrapped into a function that is partial applied and used as a datasource for the products autocomplete control. This function is invoked internally by the report engine and updates the products list with the proper values. In other words, a whole lot of mess ;)
Execute the report and you will see the two autocomplete controls working together to provide cascade filtering .
As soon as I can, I'll take a look at the NRapid core API and see if it's possible to reduce the ammount of code you need to write in order to get cascade filtering.
You can get the source code of NRapid from here
And the sample app from here
The Northwind database is available from download at http://www.microsoft.com/en-us/download/details.aspx?id=23654