有时候我们希望让数据库中的多行记录用一行来显示,比如每5个记录行合并为一行显示。这里用Repeater绑定数据显示为例(又是Repeater,怎么样,他的威力不同一般吧。真的是爱死他了。)
我这里有两种方法,经过测试,都成功了。
第一种方法:
没得说,首先推荐最简单的一种方法。代码如下:
<div style="width:1000px;">
<asp:Repeater ID="filenamelist_repeater" runat="server">
<headertemplate>
</headertemplate>
<ItemTemplate>
<div style="float:left;width:200px; height:150px">
<%# Eval("CLASSNAME") %>
</div>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
</div>
一行显示多少个由外<div>的width:1000px,和内<div>的width:200px来确定。此例中是一行显示5条记录(每个记录占200px)。 另外style="float:left"这个要设
置。这样一行显示完5条记录后就会自动换行了。(怎么样,简单的很吧。就是简单了用了一点点CSS+div而已)
第二种方法:
另一种方法就比较传统了。把记录行都放入<table>里。每输入5行记录后(假设一行显示数据表记录5行记录),在Repeater 里动态添加<tr><tr>使其换行。用这种方法去实现似乎也很理所当然,但是知道怎么去实现吗?代码如下:
<asp:Repeater runat="server" id="repeater1" OnItemDataBound="Repeater1_ItemDataBound">
<HeaderTemplate>
<table width="100%" border=0 align="center"><tr>
</HeaderTemplate>
<ItemTemplate>
<td><%#Eval("绑定字段")%></td>
</ItemTemplate>
<FooterTemplate>
</tr></table>
</FooterTemplate>
</asp:Repeater>
后台代码:
//在Repeater中的ItemDataBound事件里动态添加<tr>使其换行。
protected int i=0;
protected void Repeater1_ItemDataBound(object src,RepeaterItemEventArgs e)
{
if(i%5==0)
{
e.Item.Controls.Add(new LiteralControl("</tr><tr>")); //动态添加<tr> 使其换行。看清楚了,这里是</tr><tr> 我并没有糊涂
}
i++;
}
两种方法一比较,很显然第一种方法非常的简单。只要前台处理下就行了。但第二种方法也不复杂,而且也符合逻辑。
下面我简单分析下两种方法的优势
第一种最简便,而且可能还可以解决多个表显示的问题。比如结合我之前所说的Repeater嵌套使用。让多个表里面的多个行合并显示(上述所说的都是“一表多行合并显示”, 如何“多表多行合并显示”可以参考《Repeater控件里的大智慧之Repeater的嵌套使用》)。
第二种不用考虑太多样式的设计,而且不像第一种方法在<div>里直接设置的width为px。第一种方法可能会在不同的显示器,显示的数据会在屏幕不同的地方。但我们还是可以通过CSS样式来解决显示问题。 第二种方法很适合“一表多行合并显示”,当然也可以“多表多行合并显示”。只要外面的Repeater和嵌套在里面的Repeater控件都激发ItemDataBound事件即可。