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
Comments
Post a Comment