There were a number of gems recently added to our already fabulous reporting suite. One of the interesting ones was improved parameter support. Previously one could only create and expose parameters over integral types. A great example is filtering a report by a CategoryId. Before you would only be able to create a parameter of type int and have users type in numbers rather than category names. With our improved parameters dialog there are now additional options to choose from:

Once you check the “Supports the collection of standard values” checkbox you now have the ability to create a set of values that the parameter can take. These can be created either by a collection of static values or binding to a set of dynamic values.
Static Values
This option simply lets you define the set of available options manually.

The interface allows for the entry of the actual value passed as the parameter along with a description of what will be displayed.
Dynamic Values
Using dynamic values allows for binding to a set of key/value pairs to be displayed.

In this case we need to set the source of the data, how the data is retrieved, as well as the value and display members. At runtime both methodologies yield the following result:

Now your users can choose from an intelligible list of options that are better suited to your user while dealing with the pieces of data (like an id number) your system likes in the background.
Wait, there’s more
The next question I will invariably get is this:
“But Seth, our reports are not bound to datasets with table adapters! Can I still have dynamic parameters?”
Of course! In this particular case the best course of action is to use a Static Values list. When doing the intial setup you can place any value to start. We can then take advantage of the ParametersRequestBeforeShow event to populate the static value list as we see fit:
private void ProductReport_ParametersRequestBeforeShow(object sender, ParametersRequestEventArgs e)
{
if (CategoryId.LookUpSettings is StaticListLookUpSettings)
{
var lookup = (StaticListLookUpSettings)CategoryId.LookUpSettings;
lookup.LookUpValues.Clear();
lookup.LookUpValues.Add(
new LookUpValue { Value = 1, Description = "AAA" }
);
lookup.LookUpValues.Add(
new LookUpValue { Value = 2, Description = "BBB" }
);
lookup.LookUpValues.Add(
new LookUpValue { Value = 3, Description = "CCC" }
);
}
}
This code is deliberately simple to show the possibilities. Here I am simply hand coding the available parameter options directly into the method. One could imagine a scenario where we make a service/database/foo call to retrieve the key/value pairs to subsequently populate the list. Running the previous code will result in the following:

This new addition to our reporting suite will definitely simplify our ability to help our end users consume dynamic reports.
As always, if there are any comments and/or questions, feel free to get a hold of me!
Seth Juarez
Email: sethj@devexpress.com
Twitter: @SethJuarez
Want The Best Reporting Tool Ever?
Get The No-Compromise Reporting Tool for WinForms, ASP.NET, Silverlight and WPF! - Native integration with DevExpress WinForms and ASP.NET Controls, unequalled design-time productivity, industrial-grade features. Try a fully-functional version of DXperience for free now: http://www.devexpress.com/Downloads/NET/
Let us know what you think of our Reporting Suite by rating it in the VS Gallery!

Free DevExpress Products – Get Your Copy Today
The following free DevExpress product offers remain available. Should you have any questions about the free offers below, please submit a ticket via the
DevExpress Support Center at your convenience. We’ll be happy to follow-up.