Skip to main content

Adding a Footer to the DataGridView component

I have been searching for sites and forums that would give me a any hint on having a footer on the .net DataGridView control. It was frustrating. I found some, but not what I was looking for. I use windows forms. It would have been easier if I was into web. I decided to create one for myself. It's not complete, but it works with me. It needs improvement and I hope that some programmers who might pass through this blog will help me with it :D.

Limitations:
  1. Cannot set Footer values during design time.
  2. Can sometimes hide a row when scrolled to the last item in the grid.
What I did was just create a user control that inherits the DataGridView control and add a StatusStrip to act as the footer.


public partial class MyDataGridView : DataGridView
{

public StatusStrip Footer
{
get { return (StatusStrip)this.Controls["Footer"]; }
}

private bool _footerVisible;
[Browsable(false)]
///
/// Sets or Gets the value specifying if a footer bar is shown or not
///

public bool FooterVisible
{
get { return _footerVisible; }
set
{
_footerVisible = value;
this.Controls["Footer"].Visible = _footerVisible;
}
}

public MyDataGridView()
{
InitializeComponent();
StatusStrip footer = new StatusStrip();
footer.Name = "Footer";
footer.ForeColor = Color.Black;

this.Controls.Add(footer);
((StatusStrip)this.Controls["Footer"]).Visible = _footerVisible;
((StatusStrip)this.Controls["Footer"]).VisibleChanged += new EventHandler(RDataGridView_VisibleChanged);
this.Scroll += new ScrollEventHandler(RDataGridView_Scroll);
_footerItems = ((StatusStrip)this.Controls["Footer"]).Items;
}
}


The next thing to do is to compile the user control then get on to using it. We can then specify the footer's properties programmatically at the form that uses it (like add a progress bar or label to the footer).

Well, I hope someone will be able to read this blog and enhance the control.

Comments

Anonymous said…
I solved this problem by adding a second datagrid instead of a status strip. Basically I add the datagrid, make it show only one row, and then ensure that it always displays at the bottom so it appears as a frozen row. Then as the user resizes the parent datagrid columns, reorders etc etc, I account for this by adjusting the child datagrid. That way the child datagrid always looks like it is on the parent datagrid. The only problem I ran into was the very last row in the parent datagrid is half hidden by the child datagrid. If I could figure out how to detect when the user has scrolled to the end of the datagrid, I could fix this.

Jason

Popular posts from this blog

Using Crystal Reports 10 with C#.net and Firebird

C# express doesn't include a report designer or viewer. Reports however, is very much needed when creating a business software. Since C# express doesn't include a report designer, we need to find other means. One is to use a free report such as MyNeoReport. This however may not work under many circumstances. The other alternative would be to use a proven report engine and designer-Crystal Report. Crystal Report has been used by many developers (in our city). However, using a free programming language and IDE, and a free database is very limiting. Not much information can be gathered on the net either (with regards to reporting as of this writing). Here's a way to use Crystal Reports using Firebird database and C# Express as software development IDE: Pre-requisites: C# Express 2005 EMS SQL Manager 2005 for InterBase & Firebird Lite Crystal Reports 10 Create the following database: Name: TestDB1 Tables: TESTTABLE1 Columns:  ID - PK, INTEGER,AUTOINCREMENT DES...

Using Firebird with ASP.net

In my previous post , I was able to connect a firebird 2.0 database to asp.net using controls. The next goal was to connect to a firebird database using the firebird.net engine and using the repeater control. I however, was able to use the firebird.net engine to connect to the firebird database but not to the repeater control. I used the html table tag. I've created a simple asp.net demo displaying the contents of a firebird database on page load. Here are the steps: 1. Things Needed: Firebird 2.0 Server Firebird 2.0 Client Visual Web Developer 2. In Visual Web Developer, create a new ASP.net Website (using C# as the programming language). The project will have a default page named Default.aspx. Make sure that the code is separate from the page (ex. Default.aspx.cs is separate from Default.aspx) 3. On the Website menu, click on Add Reference. 4. Select the Firebird - ADO.net 2.0 Data Provider and click Ok. 5. Add using FirebirdSql.Data.FirebirdClient; to the "using" sec...