Telerik Grid and Dynamic filtering
Well let me say this is a tale of solving a problem for an existing system with poor test coverage. Ok no test coverage. No I didn't write it. But yes I have to enhance it. It isn't badly done code. I mean there are places it could be improved. Things I would have done differently. New shining technologies we could and would use if it is was being done again but all in all it is straight forward and clean. But it has no working tests, no comments. I want to modify this code with minimal changes to minimize my risk and move on to more interesting things. Oh did I mention the front end is built around Telerik. You either love them or hate them. For me it just depends on the problem but I usually just avoid them.
Nice term what does it mean....
A grid with filtering drop downs:
We want the filter drop downs with no selected filter value to filter the available options to only available choices based on other filters.
I assumed this would be an easy enhancement. I just was not sure exactly the best way to do it. But after more time then I care to admit too and a few path deviations, I came to the conclusion it was going to be harder than I thought. Maybe some ajax calls after a filter selection or something else.
Well during my stage of coming to terms with what needed to be done, I stumbled across the FilterExpression property on my MasterTableView: grd.MasterTableView.FilterExpression.
OMG!!!
It has exactly what I want. The where clause for the data being displayed in the grid.
Some more google searches but not much luck on a clear example.
Well I am familiar with Linq. I have written in the past Dynamic expression code. This could be what I want. Now I remember the Dynamic Expression code being a pain to write so I need to dig up all code. But rather than dig it up I try that Nuget search thingy. ChaChing, someone has put it together for me. I don't even have to dig it up. DynamicQuery is the name and it look usable.
10 minutes later.....
On my drop downs filter Init function.
Pseudo code follows:
Now that for me this is a simple low impact solution. Notice the Where extension from the awesome DynamicQuery assembly. I am using the expression right from the grid. Maybe not the most efficient solution but low impact and easy to understand.
A shout out to Linq Goodness, Nuget and my fellow community of internet coders: You guys are great!
Cheerio!!!
We want the filter drop downs with no selected filter value to filter the available options to only available choices based on other filters.
I assumed this would be an easy enhancement. I just was not sure exactly the best way to do it. But after more time then I care to admit too and a few path deviations, I came to the conclusion it was going to be harder than I thought. Maybe some ajax calls after a filter selection or something else.
Well during my stage of coming to terms with what needed to be done, I stumbled across the FilterExpression property on my MasterTableView: grd.MasterTableView.FilterExpression.
OMG!!!
It has exactly what I want. The where clause for the data being displayed in the grid.
Some more google searches but not much luck on a clear example.
Well I am familiar with Linq. I have written in the past Dynamic expression code. This could be what I want. Now I remember the Dynamic Expression code being a pain to write so I need to dig up all code. But rather than dig it up I try that Nuget search thingy. ChaChing, someone has put it together for me. I don't even have to dig it up. DynamicQuery is the name and it look usable.
10 minutes later.....
On my drop downs filter Init function.
Pseudo code follows:
//Get the filter expression
string expression = grid.MasterTableView.FilterExpression;if (expression != string.Empty && !expression.Contains("AreaId"))
{
var rst = GridRep.GetAllItems()
.AsQueryable()
.Where(expression)
.Select(
x => new Area() { SubsystemID = x.AreaID, Name = x.AreaName })
.Distinct().OrderBy("Name");
rcb.DataSource = rst;
}
else
{
rcb.DataSource = AreasRep.GetAllAreas();
}
Now that for me this is a simple low impact solution. Notice the Where extension from the awesome DynamicQuery assembly. I am using the expression right from the grid. Maybe not the most efficient solution but low impact and easy to understand.
A shout out to Linq Goodness, Nuget and my fellow community of internet coders: You guys are great!
Cheerio!!!
Comments