 <p><strong>TFOOT Customisation:</strong></p> <p>The footer will always default to creating the same number of cells as the rest of the gridview. You can override this in code by adding:</p> <pre><code>protected void OurGrid_RowCreated(object sender, GridViewRowEventArgs e) { if(e.Row.RowType == DataControlRowType.Footer) { int colSpan = e.Row.Cells.Count; for(int i = (e.Row.Cells.Count - 1); i &gt;= 1; i -= 1) { e.Row.Cells.RemoveAt(i); e.Row.Cells[0].ColumnSpan = colSpan; } HtmlAnchor link1 = new HtmlAnchor(); link1.HRef = "#"; link1.InnerText = "Newest Members"; HtmlAnchor link2 = new HtmlAnchor(); link2.HRef = "#"; link2.InnerText = "Top Posters"; // Add a non-breaking space...remove the space between &amp; and nbsp; // I just can't seem to get it to render in LiteralControl space = new LiteralControl("&amp; nbsp;"); Panel p = new Panel(); p.Controls.Add(link1); p.Controls.Add(space); p.Controls.Add(link2); e.Row.Cells[0].Controls.Add(p); } } </code></pre> <p>...and add the onrowcreated attribute to the server control:</p> <pre><code>&lt;asp:GridView ID="ourGrid" onrowcreated="OurGrid_RowCreated" ... </code></pre> <p><strong>THEAD styles:</strong></p> <p>You can specify the header css class for each column in the 'headerstyle-cssclass' for each bound field. For example:</p> <pre><code>&lt;asp:BoundField headerstyle-cssclass="col1_style1" DataField="Name" HeaderText="Full Name" /&gt; &lt;asp:BoundField headerstyle-cssclass="col1_style2" DataField="Gender" HeaderText="Gender" /&gt; </code></pre> <p><strong>Table Summary:</strong></p> <p>Just add the summary attribute to the griview:</p> <pre><code>&lt;asp:GridView ID="ourGrid" summary="blah" ... </code></pre> <p>Putting it all together:</p> <pre><code>&lt;%@ Page Language="C#" %&gt; &lt;%@ Import Namespace="System.Data"%&gt; &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; &lt;script runat="server"&gt; protected void Page_Load(object sender, EventArgs e) { DataSet ds = CreateDataSet(); this.gv.DataSource = ds.Tables[0]; this.gv.DataBind(); this.gv.HeaderRow.TableSection = TableRowSection.TableHeader; this.gv.FooterRow.TableSection = TableRowSection.TableFooter; } protected void OurGrid_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.Footer) { int colSpan = e.Row.Cells.Count; for (int i = (e.Row.Cells.Count - 1); i &gt;= 1; i -= 1) { e.Row.Cells.RemoveAt(i); e.Row.Cells[0].ColumnSpan = colSpan; } HtmlAnchor link1 = new HtmlAnchor(); link1.HRef = "#"; link1.InnerText = "Newest Members"; HtmlAnchor link2 = new HtmlAnchor(); link2.HRef = "#"; link2.InnerText = "Top Posters"; LiteralControl l = new LiteralControl("&amp;nbsp;"); Panel p = new Panel(); p.Controls.Add(link1); p.Controls.Add(l); p.Controls.Add(link2); e.Row.Cells[0].Controls.Add(p); } } private DataSet CreateDataSet() { DataTable table = new DataTable("tblLinks"); DataColumn col; DataRow row; col = new DataColumn(); col.DataType = Type.GetType("System.Int32"); col.ColumnName = "ID"; col.ReadOnly = true; col.Unique = true; table.Columns.Add(col); col = new DataColumn(); col.DataType = Type.GetType("System.DateTime"); col.ColumnName = "Date"; col.ReadOnly = true; col.Unique = false; table.Columns.Add(col); col = new DataColumn(); col.DataType = Type.GetType("System.String"); col.ColumnName = "Url"; col.ReadOnly = true; col.Unique = false; table.Columns.Add(col); DataColumn[] primaryKeysColumns = new DataColumn[1]; primaryKeysColumns[0] = table.Columns["ID"]; table.PrimaryKey = primaryKeysColumns; DataSet ds = new DataSet(); ds.Tables.Add(table); row = table.NewRow(); row["ID"] = 1; row["Date"] = new DateTime(2008, 11, 1); row["Url"] = "www.bbc.co.uk/newsitem1.html"; table.Rows.Add(row); row = table.NewRow(); row["ID"] = 2; row["Date"] = new DateTime(2008, 11, 1); row["Url"] = "www.bbc.co.uk/newsitem2.html"; table.Rows.Add(row); return ds; } &lt;/script&gt; &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;head runat="server"&gt; &lt;title&gt;&lt;/title&gt; &lt;style type="text/css"&gt; .red { color: red; } .olive { color:Olive; } .teal { color:Teal; } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;form id="form1" runat="server"&gt; &lt;div&gt; &lt;asp:gridview id="gv" autogeneratecolumns="false" showheader="true" showfooter="true" summary="Here is the news!" caption="The Caption" captionalign="Top" alternatingrowstyle-cssclass="alt_row" useaccessibleheader="true" onrowcreated="OurGrid_RowCreated" runat="server"&gt; &lt;columns&gt; &lt;asp:boundfield headertext="ID" headerstyle-cssclass="olive" datafield="id" /&gt; &lt;asp:hyperlinkfield headertext="Link" headerstyle-cssclass="red" datanavigateurlfields="Url" datanavigateurlformatstring="http://{0}" datatextfield="Url" datatextformatstring="http://{0}" /&gt; &lt;asp:boundfield headertext="Date" headerstyle-cssclass="teal" datafield="Date"/&gt; &lt;/columns&gt; &lt;/asp:gridview&gt; &lt;/div&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt; </code></pre> <p>The above produces the following HTML:</p> <pre><code>&lt;table cellspacing="0" rules="all" summary="Here is the news!" border="1" id="gv" style="border-collapse:collapse;"&gt; &lt;caption align="Top"&gt; The Caption &lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th class="olive" scope="col"&gt;ID&lt;/th&gt; &lt;th class="red" scope="col"&gt;Link&lt;/th&gt; &lt;th class="teal" scope="col"&gt;Date&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt; &lt;a href="http://www.bbc.co.uk/newsitem1.html"&gt; http://www.bbc.co.uk/newsitem1.html &lt;/a&gt; &lt;/td&gt; &lt;td&gt;01/11/2008 00:00:00&lt;/td&gt; &lt;/tr&gt; &lt;tr class="alt_row"&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt; &lt;a href="http://www.bbc.co.uk/newsitem2.html"&gt; http://www.bbc.co.uk/newsitem2.html &lt;/a&gt; &lt;/td&gt; &lt;td&gt;01/11/2008 00:00:00&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;tfoot&gt; &lt;tr&gt; &lt;td colspan="3"&gt; &lt;div&gt; &lt;a href="#"&gt;Newest Members&lt;/a&gt;&amp;nbsp;&lt;a href="#"&gt;Top Posters&lt;/a&gt; &lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tfoot&gt; &lt;/table&gt; </code></pre>