A more elegant solution to display GridView header and footer when the data source is empty. (cite)

http://weblogs.asp.net/joewrobel/archive/2008/01/30/a-more-elegant-solution-to-display-gridview-header-and-footer-when-the-data-source-is-empty.aspx

So here is my solution.  I'll cover the main points of interest and if you want to see more, I have
uploaded all the source and example to the new MSDN Code Gallery.
http://code.msdn.microsoft.com/AlwaysShowHeaderFoot

Start out by extending the GridView control and add the following structure. 
The most important part here is to override the PerformDataBinding method.
 

As you can see here.  I am intercepting the data and making sure there is at lease one row. 
If there is, the control behaves normally.
On the line with the red arrow, I am checking if the binding source is a DataView. 
If it is, I can just add a row here and be done with it.
If the binging source is not a DataView (or DataSet), then I fire an event that will need to be handled.
 

The event "MustAddARow", as seen here, will provide access to the binding data and allow you to add a row.
 

Here is a snippet from a page where I handle the MustAddARow event.
In this case, I am binding a List of Products to the GridView.
As you can see, I'm just adding a new Product to the list.  It doesn't matter what data you add here
because it will get hidden in back in the GridView.

And finally back in the GridView, I override the OnDataBound method so I can hide that extra row.
 

So there you have it.  This is my first blog post ever.  It's exciting, but I have to admit, I'm a little scared.
I see there is a lot of commotion going on about the overwhelming number of useless blogs lately.
Hopefully someone will get some use out of this.

Thanks
-Joe

你可能感兴趣的:(A more elegant solution to display GridView header and footer when the data source is empty. (cite))