这个问题已经在这里被提出并解决了(链接),但是微软只是说分页和排序功能需要这个div。那么我是否理解正确,如果我想使用分页和排序功能,我不能包装自己的div并应用样式吗?谢谢。
如果您的包装器没有样式(看起来是这样),但想要强制应用样式,请给它添加另一个包装器,并将样式应用于组合体。例如,如果一个普通的div有一些您想要去除的填充,则在aspx中使用以下代码:
<div id="crushGvDiv">
<asp:GridView ... >
</div>
还有这个是关于CSS的:
div#crushGvDiv, div#crushGvDiv div { padding: 0; margin: 0; }
更新
Ian的回应去除了很多hackery,但这也需要我花更多的精力。如果我们稍微改变一下,我认为我们可以兼顾两全...
我们不再想在源代码中添加'table-responsive' div了。但是我们确实想在我们的GridView类中添加'table-responsive-table'。
ASP
<asp:GridView ID=gvMain DataSourceID=dsMain RunAt=Server
CssClass='table table-responsive-table'>
$( document ).ready(function() {
$(".table-responsive-table").parent().addClass('table-responsive');
});
HTML
<div class=table-responsive>
<table class='table table-responsive-table' .....>
注意:我尚未测试这个新代码,但它可能完全正常工作。
<div>
,而是获取了gridview的父元素:$("#<%= MyGridView.ClientID %>").parent().addClass('table-responsive');
- Ian一种不需要修改渲染的简单解决方案:
我需要对由GridView生成的div应用样式,因为它破坏了我的布局,所以我创建了一个id为“myContainerDiv”的div,并将我的GridView移动到其中,使用jQuery应用一些样式。
示例:
$("#myContainerDiv > div").css("display", "inline");
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args) {
if (args.get_error() == undefined && sender._updatePanelClientIDs != null &&
sender._updatePanelClientIDs.length > 0 && sender._updatePanelClientIDs[0] == "<%= MyParticularUpdatePanel.ClientID %>") {
$("#myContainerDiv > div").css("display", "inline");
}
}
</script>
解决了!
整个页面将会是这样的:
<script type="text/javascrcipt" src="jquery.js"></script>
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args) {
if (args.get_error() == undefined && sender._updatePanelClientIDs != null &&
sender._updatePanelClientIDs.length > 0 && sender._updatePanelClientIDs[0] == "<%= MyParticularUpdatePanel.ClientID %>") {
$("#myContainerDiv > div").css("display", "inline");
}
}
</script>
<asp:UpdatePanel runat="server" ID="MyParticularUpdatePanel" UpdateMode="Conditional" RenderMode="Inline">
<Triggers>
// Your triggers here...
</Triggers>
<ContentTemplate>
<div id="myContainerDiv" style="display:inline;">
<asp:GridView runat="server" ID="MyGridView" AutoGenerateColumns="false" Height="150px" EmptyDataText="No data.">
<Columns>
<asp:BoundField DataField="ID" HeaderText="My ID" />
</Columns>
</asp:GridView>
</div>
</ContentTemplate>
</asp:UpdatePanel>
我不知道这段代码是否能像我写的那样编译,因为我是用记事本写的。
对不起,我的英语很差,我来自巴西。
Christophe Trevisani Chavey。 http://www.christophetrevisani.com
我也遇到了同样的问题,天啊,这太让人恼火了。当将一个div对齐到gridview的顶部时,在IE6/7中渲染出现故障——父DIV会在两个元素之间产生空隙。
我使用反编译工具深入研究了GridView代码,找到了问题所在:
Private Sub Render(ByVal writer As HtmlTextWriter, ByVal renderPanel As Boolean)
If (Not Me.Page Is Nothing) Then
Me.Page.VerifyRenderingInServerForm(Me)
End If
Me.PrepareControlHierarchy
If renderPanel Then
Dim clientID As String = Me.ClientID
If Me.DetermineRenderClientScript Then
If (clientID Is Nothing) Then
Throw New HttpException(SR.GetString("GridView_MustBeParented"))
End If
Dim builder As New StringBuilder("__gv", (clientID.Length + 9))
builder.Append(clientID)
builder.Append("__div")
writer.AddAttribute(HtmlTextWriterAttribute.Id, builder.ToString, True)
End If
writer.RenderBeginTag(HtmlTextWriterTag.Div)
End If
Me.RenderContents(writer)
If renderPanel Then
writer.RenderEndTag
End If
End Sub
Protected Friend Overrides Sub Render(ByVal writer As HtmlTextWriter)
Me.Render(writer, Not MyBase.DesignMode)
End Sub
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Me.PrepareControlHierarchy()
Me.RenderContents(writer)
End Sub
使用CSS类“gridViewWrapperFix”是最简单和最好的解决方案。
ASPX:
<div class="gridViewWrapperFix">
<asp:GridView>
<%--the full gridview would go here--%>
</asp:GridView>
</div>
CSS:
/* styles the div that gets auto generated around and asp.net gridview */
.gridViewWrapperFix > div {
padding: 0;
margin: 0;
border: 3px solid red;
}
我从未这样做过,但我的第一个猜测是您可以在输出呈现的 HTML 到达浏览器之前获取它,删除外部 div,然后在 prerender 事件中 htmltextwrite 出您的新呈现的 HTML 或创建一个用户或自定义控件来执行此操作。
但是,这样做会有破坏 gridview 功能的风险,但如果您知道不会使用使用 div 的功能,则可能会得逞。
你可以为你的Gridview定义一个明确的CssClass来使用。
<asp:GridView ... CssClass="nameOfStyleClass" ... />
然后定义一个 CSS 类:
.nameOfStyleClass
{
< Style stuff >
}