Twitter Bootstrap 和 ASP.NET GridView

Posted

技术标签:

【中文标题】Twitter Bootstrap 和 ASP.NET GridView【英文标题】:Twitter Bootstrap and ASP.NET GridView 【发布时间】:2012-09-03 22:47:29 【问题描述】:

我在使用 ASP.NET 应用程序中的 Twitter Bootstrap 时遇到问题。当我将table table-striped css 类用于我的asp:GridView 控件时,它将表格的Header 视为。 p>

我的网格视图

ASP.NET 标记

<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>

结果

<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>

应该是这样的

<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>

如何使我的 asp:GridView 的标题被 Twitter Bootstrap 视为标题? 我的代码是 C#,框架 4,在 VS2010 Pro 中构建。

【问题讨论】:

【参考方案1】:

您需要将gridview 的useaccessibleheader 属性设置为true,然后还需要在GridView 对象上调用DataBind() 方法后指定TableSection 作为标题。所以如果你的网格视图是mygv

mygv.UseAccessibleHeader = True
mygv.HeaderRow.TableSection = TableRowSection.TableHeader

这应该会生成带有theadtbody 标签的格式正确的网格

【讨论】:

我在dgvUsers.HeaderRow.TableSection = TableRowSection.TableHeader; 行中抛出了一个NullReferenceException 谢谢,我应该把那行放在dgv.DataBind() 数据绑定到我的GridView 之后,NullReferenceException 现在已经消失了。它现在可以工作了。再次感谢。 @JohnIsaiahCarmona 请注意,当没有任何行可显示(当数据源为空时)时,HeaderRow 仍将为空 对于以后来这里的任何人,不要认为“真”应该是“真”【参考方案2】:

有两个步骤可以解决这个问题:

    UseAccessibleHeader="true" 添加到 Gridview 标签:

    <asp:GridView ID="MyGridView" runat="server" UseAccessibleHeader="true">
    

    将以下代码添加到PreRender 事件:


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

注意在DataBound() 中设置标题行仅在对象被数据绑定时有效,任何其他不数据绑定gridview 的回发将导致gridview 标题行样式再次恢复为标准行。 PreRender 每次都有效,只需确保当 gridview 为空时有错误捕获。

【讨论】:

【参考方案3】:

为了记录,我在表格中有边框,为了摆脱它,我需要在 GridView 中设置以下属性:

GridLines="None"
CellSpacing="-1"

【讨论】:

【参考方案4】:

在gridview中添加show header的属性

 <asp:GridView ID="dgvUsers" runat="server" **showHeader="True"** CssClass="table table-hover table-striped" GridLines="None" 
AutoGenerateColumns="False">

并在列中添加标题模板

<HeaderTemplate>
                   //header column names
</HeaderTemplate>

【讨论】:

以上是关于Twitter Bootstrap 和 ASP.NET GridView的主要内容,如果未能解决你的问题,请参考以下文章

为 Twitter 的 Bootstrap 3.x 按钮设计样式

Twitter 的 Bootstrap 3 网格,更改断点和删除填充

结合 AngularJS 和 Twitter Bootstrap 的最佳方式

Twitter Bootstrap Typeahead - 标识和标签

Twitter Bootstrap:前端框架利器

从 Grails Twitter-Bootstrap 插件覆盖 CSS