Can't set the Header Text in my GridView in ASP.NET C#

I am using ASP.NET 4.0 C# and am trying to programmatically set the Header Text for the GridView on my page.  I am getting an Index was out of range error and can't figure out what I am doing wrong.  Here is the GridView on my page:

            <asp:GridView ID="gvWarnings" runat="server">

Open in new window

And here is the code where I am trying to set the HeaderText:

                gvWarnings.DataSource = dtWarnings;
                gvWarnings.CellPadding = 3;
                gvWarnings.CellSpacing = 3;
                gvWarnings.Columns[0].HeaderText = "Warning";
                gvWarnings.Columns[1].HeaderText = "Date";
                gvWarnings.Columns[2].HeaderText = "Title";

Open in new window

dtWarnings is a datatable with 3 columns in it.  

Any help is greatly appreciated!
Who is Participating?

Improve company productivity with a Business Account.Sign Up

You might have null records in your query!  I would recommand that you check null in your coding - put exception or something.
dyaroshAuthor Commented:
The table definitely has data.  It displays on the screen if I comment out the code where I am trying to set the Header Column Names.
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

I know the table has data and you might have one missing records out from your table!  Have you check all individual rows using SQL script?
what is your dtWarnings looks like in code behind or SQL script/stored procedure?  The index error meant that you either reference wrong columns or with some missing data!
dyaroshAuthor Commented:
Here is the SQL:

            sql = "SELECT WarningType, WarningDate, TitleDesc " +
                  "FROM EMP_Warnings " +
                  "JOIN EMP_WarningType ON EMP_WarningType.WarningTypeID = EMP_Warnings.WarningTypeID " +
                  "WHERE EmployeeID = " + employeeID.ToString();
dyaroshAuthor Commented:
I ended up setting the column headings in the RowDataBound event.  Thanks for the help.
Here is how I coded my datagrid!

---------------------- aspx page ---------------------- (UserName from database column)

              <asp:datagrid id="dgTest" runat="server" OnPageIndexChanged="dgTest_OnPageIndexChanged">
                   <asp:TemplateColumn HeaderText="Name">

------------------------- code behind page ------------------------
public void dgTest_OnPageIndexChanged(Object sender, DataGridItemEventArgs e)
    ---- open db connection ---
    ---- select sql syntax here

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.