我有一个带有GridView的DataRepeater,用于显示存储过程中的一些表。
这是我的转发器代码:
<asp:Repeater ID="rptResults" runat="server" OnItemDataBound="rptResults_ItemDataBound">
<ItemTemplate>
<div style="width: 1100px; overflow: scroll;">
<asp:GridView ID="gvResults" runat="server" BackColor="LightGoldenrodYellow" BorderColor="Tan"
BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None">
<FooterStyle BackColor="Tan" Wrap="false" />
<RowStyle Wrap="false" />
<PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center"
Wrap="false" />
<SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" Wrap="false" />
<HeaderStyle BackColor="Tan" Font-Bold="True" Wrap="false" />
<AlternatingRowStyle BackColor="PaleGoldenrod" Wrap="false" />
</asp:GridView>
<asp:Label runat="server" ID="lblNoRecords" Visible="false"></asp:Label>
</div>
<br />
</ItemTemplate>
</asp:Repeater>
我有我的转发器绑定:
rptResults.DataSource = results.Tables;
rptResults.DataBind();
我为每个表格提供了以下GridView绑定:
protected void rptResults_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var o = e.Item.DataItem as DataTable;
if (o.Rows.Count == 0)
{
var lblNoRecords = (Label) e.Item.FindControl("lblNoRecords");
lblNoRecords.Text = "No Records";
lblNoRecords.Visible = true;
}
else
{
var gv = (GridView)e.Item.FindControl("gvResults");
gv.DataSource = o;
gv.DataBind();
}
}
}
返回的数据可能会更改,因为它是一个存储过程,并且它将始终返回n个表。
我想根据返回的数据尝试将我的列设置为自动调整大小。现在它消耗了大部分数据,包括日期/时间数据。
我似乎无法弄清楚如何做到这一点。
思想?
答案 0 :(得分:2)
很抱歉,如果这是无关紧要的,但我正在阅读你的问题的行,并想知道你是否只是想让某些列(例如你的日期/时间列)不包装他们的内容,从而推迟包装到其他列(如文本列)?浏览器通常会尝试最佳地布局HTML表。如果您希望某些列不要换行,可以使用CSS white-space: nowrap
属性。
在使用ItemTemplate的GridView中,有一个Wrap =“False”属性:
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Data") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Wrap="False" />
如果要使用自动生成的列,则必须在每个生成的GridView上处理相应的事件,然后在代码隐藏中设置属性。类似的东西:
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[2].Attributes.Add("style", "white-space: nowrap;");
}
显然,您首先需要确定绑定列数据是否属于您要禁止包装的类型。
以上是最糟糕的情况;你可以逃避处理那些不会发射的事件(可能是每列),但我不确定这是否适用于你的情况。
如果您希望整个表不要换行,您可以在页面上为所有table.tr.td
元素设置CSS属性。
答案 1 :(得分:0)
这对我有用
<asp:GridView ID="SomeGridView" CssClass="gridtext" >
.gridtext
{
white-space: nowrap;
}
.gridtext table
{
white-space: nowrap;
}
.gridtext tr
{
white-space: nowrap;
}
.gridtext td
{
white-space: nowrap;
}
.gridtext th
{
white-space: nowrap;
}