One of the most common features of community websites these days is the
events calendar. It's also the source of one of my pet hates, the
stretching of calendar cells as event title links are added for a
particular day. Nothing looks worse than an event calendar with an
average of one or two events per day... with that one fifteen-event day
stretching the entire Calendar control down the page. This is not just
an issue of esthetics. If you only display a limited number of events
for a given day, pretty soon the other event organizers will be calling
to ask why their events are not being shown! In such situations, a
compromise is frequently called for.
Recently, I worked on such an events calendar for my local town's
Business Improvement District. The client wanted an easy way for users
to see when there were events without having to dig too much to find
them.I did not want to use the Calendar control to display event links.
I chose instead to implement a master Calendar highlighting days that
had events, and an associated events listing implemented as a pageable
GridView.
During development, I encountered the following exception:
ObjectDataSource 'sourceEvents' could not find a non-generic method
'GetEventsByMonth' that has parameters: startDate, endDate, startDate1,
endDate1...
This occurred in the paging event handler for the GridView. I was
adding the SQL parameters programmatically and implemented a quick fix
as shown below:
// Manually remove any select parameters from ParameterCollection
sourceEvents.SelectParameters.Remove(sourceEvents.SelectParameters["startDate"]);
sourceEvents.SelectParameters.Remove(sourceEvents.SelectParameters["endDate"]);
Then I added the same parameters as before and everything worked fine.
If I ever have to do something similar again and there are a lot of
events involved, I might have to look to AJAX for a more creative
alternative. Has anyone found another way of doing this? If you would
like the complete code, please email me.