Twitter Bootstrap and ASP.NET GridView
Solution 1
You need to set useaccessibleheader
attribute of the gridview to true
and also then also specify a TableSection
to be a header after calling the DataBind()
method on you GridView object. So if your grid view is mygv
mygv.UseAccessibleHeader = True
mygv.HeaderRow.TableSection = TableRowSection.TableHeader
This should result in a proper formatted grid with thead
and tbody
tags
Solution 2
There are 2 steps to resolve this:
Add
UseAccessibleHeader="true"
to Gridview tag:<asp:GridView ID="MyGridView" runat="server" UseAccessibleHeader="true">
Add the following Code to the
PreRender
event:
Protected Sub MyGridView_PreRender(sender As Object, e As EventArgs) Handles MyGridView.PreRender
Try
MyGridView.HeaderRow.TableSection = TableRowSection.TableHeader
Catch ex As Exception
End Try
End Sub
Note setting Header Row in DataBound()
works only when the object is databound, any other postback that doesn't databind the gridview will result in the gridview header row style reverting to a standard row again. PreRender works everytime, just make sure you have an error catch for when the gridview is empty.
Solution 3
Just for the record, I got borders in the table and to get rid of it I needed to set following properties in the GridView:
GridLines="None"
CellSpacing="-1"
John Isaiah Carmona
Experienced Software Engineer with a demonstrated history of working in the insurance industry. Skilledin C#, Databases, Ruby on Rails, and Web Services.
Updated on April 21, 2020Comments
-
John Isaiah Carmona about 4 years
I am having aproblem using Twitter Bootstrap from my ASP.NET application. When I use the
table table-striped
css class to myasp:GridView
control, it treats the Header of the table as a Row.My GridView
ASP.NET MarkUp
<asp:GridView ID="dgvUsers" runat="server" CssClass="table table-hover table-striped" GridLines="None" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField="UserID" HeaderText="ID" Visible="false" /> <asp:BoundField DataField="Username" HeaderText="Username" /> <asp:BoundField DataField="FirstName" HeaderText="First Name" /> <asp:BoundField DataField="LastName" HeaderText="Last Name" /> </Columns> <RowStyle CssClass="cursor-pointer" /> </asp:GridView>
Result
<table id="cphMainContent_dgvUsers" class="table table-hover table-striped" cellspacing="0" style="border-collapse:collapse;"> <tbody> <tr> <th scope="col">Username</th> <th scope="col">First Name</th> <th scope="col">Last Name</th> </tr> <tr class="cursor-pointer"> <td>user1</td> <td>Test</td> <td>User 1</td> </tr> <tr class="cursor-pointer"> <td>user2</td> <td>Test</td> <td>User 2</td> </tr> <tr class="cursor-pointer"> <td>user3</td> <td>Test</td> <td>User 3</td> </tr> </tbody> </table>
It should be like this
<table class="table table-striped"> <thead> <tr> <th>#</th> <th>First Name</th> <th>Last Name</th> <th>Username</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Mark</td> <td>Otto</td> <td>@mdo</td> </tr> <tr> <td>2</td> <td>Jacob</td> <td>Thornton</td> <td>@fat</td> </tr> <tr> <td>3</td> <td>Larry</td> <td>the Bird</td> <td>@twitter</td> </tr> </tbody> </table>
How can I make the header of myasp:GridView
be treated as a Header by Twitter Bootstrap? My code is in C#, framework 4, build in VS2010 Pro. -
John Isaiah Carmona over 11 yearsI throws a NullReferenceException in the line
dgvUsers.HeaderRow.TableSection = TableRowSection.TableHeader;
. -
John Isaiah Carmona over 11 yearsThanks, I should just put that line after the
dgv.DataBind()
binding of data to myGridView
and the NullReferenceException is now gone. It now work. Thanks again. -
Drakarah over 10 years@JohnIsaiahCarmona Do note that the HeaderRow will still be null when there aren't any rows to display (when the datasource is empty)
-
Admin about 7 yearsFor anyone coming here later, take not that "True" should be "true"