要布局上面图片的效果,用Repeater怎么布局呢?
解决方案 »
- 分享一个基于jQuery的锁定表格行列的js脚本。
- sql如何把表里重数据只列出一次
- 我用remoting试着编写一个聊天程序但是无法返回客户端发送的信息请问如何解决
- 跨页发送怎么获取前一个页面的某个控件的值
- 大家好!请问如何解决使用ObjectDataSource时抛出的"未能找到带参数的非泛型方法"异常
- 要做SQL、ACCESS、中英文、功能不同的多个版本,怎么办?
- ★★★★★菜鸟问题,求救★★★★★
- 关于DataSet提交回数据库的问题。。困扰好几天了
- 请问高手:在asp.net中如何弹出对话框,如:做一个用户登录验证,用户名和密码不正确,则弹出一个对话框,而不是连到别的网页。一定给分
- Web用户控件中动态创建的TextBox输入值的存取问题
- 求一正则表达式
- repeater控件一行显示2条数据
<div class="neibg">
<table border="0" cellspacing="1" cellpadding="0" class="formtab" width="100%">
<tr>
<td rowspan="2">
合计
</td>
<td>
日期
</td>
<asp:Label ID="lblDate" runat="server"></asp:Label>
<td>
单位名称
</td>
<td colspan="3">
<asp:Label ID="lblTravelName" runat="server"></asp:Label>
</td>
<td>
团队数
</td>
<td colspan="2">
<asp:Label ID="lblTeamNum" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td class="style2">
总人数
</td>
<td class="style2">
<asp:Label ID="Label2" runat="server"></asp:Label>
</td>
<td class="style2">
总过夜游人数
</td>
<td class="style2">
<asp:Label ID="Label5" runat="server"></asp:Label>
</td>
<td class="style2">
总一日游人数
</td>
<td class="style2">
<asp:Label ID="Label4" runat="server"></asp:Label>
</td>
<td class="style2">
总人天数
</td>
<td class="style2">
<asp:Label ID="Label3" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td rowspan="3">
上海
</td>
<td>
小计
</td>
<td>
</td>
<td>
过夜游客数
</td>
<td>
</td>
<td>
一日游客数
</td>
<td>
</td>
<td>
人天数
</td>
<td>
</td>
</tr>
<tr>
<td>
景区
</td>
<td colspan="7">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="tabntab">
<tr>
<th>
名称
</th>
<th colspan="6">
人数
</th>
</tr>
<tr>
<td>
双龙洞
</td>
<td colspan="6">
</td>
</tr>
<tr>
<td>
地下长河
</td>
<td colspan="6">
10
</td>
</tr>
<tr>
<td>
诸葛八卦村
</td>
<td colspan="6">
20
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
酒店
</td>
<td colspan="7">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="tabntab">
<tr>
<th>
名称
</th>
<th>
入住人数
</th>
<th>
入住天
</th>
<th>
人天数
</th>
<th>
住宿凭证编号
</th>
</tr>
<tr>
<td>
莫泰<span lang="EN-US">168</span>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
世贸大饭店
</td>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
肯定能实现原。。三个repeater没必要。。
所以不存在什么“repeater布局”这样的东西
布局是HTML的事,把每一项(最外层的<TR>)写进repeater,数据换成<%# Eval()%>绑定就行了
----------------------------------------------------------------
<asp:Repeater ID="repMain" runat=server onitemdatabound="repMain_ItemDataBound">
<HeaderTemplate>
<table width=600 align=center>
<tr><td rowspan=2>合计</td><td>日期</td><td>单位名称</td><td colspan=3>[单位名称]</td></tr>
<tr><td>总人数</td><td>[总人数]</td><td>总过夜游人数</td><td>[00]</td><td>总一日游人数</td></tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td rowspan=3>上海[值为绑定]</td>
<td>小计</td>
<td>[00]</td>
<td>过夜游人数</td>
<td>[00]</td>
<td>一日游客数</td>
</tr>
<tr>
<td>景区</td>
<td colspan=4>
<asp:DataGrid ID="dgJingQu" runat=server AutoGenerateColumns=false AllowPaging=false Width=100%>
<HeaderStyle CssClass="CustomHeaderStyle" />
<ItemStyle CssClass="CustomItemStyle" />
<Columns>
<asp:BoundColumn HeaderText="名称" DataField="JQName"></asp:BoundColumn>
</Columns>
</asp:DataGrid>
</td>
</tr>
<tr>
<td>酒店</td>
<td colspan=4>
<asp:DataGrid ID="dgJiuDian" runat=server AutoGenerateColumns=false AllowPaging=false Width=100%>
<HeaderStyle CssClass="CustomHeaderStyle" />
<ItemStyle CssClass="CustomItemStyle" />
<Columns>
<asp:BoundColumn HeaderText="名称" DataField="JQName"></asp:BoundColumn>
<asp:BoundColumn HeaderText="入驻人数" DataField="Members"></asp:BoundColumn>
<asp:BoundColumn HeaderText="入住天" DataField="Days"></asp:BoundColumn>
<asp:BoundColumn HeaderText="人**" DataField="Field4"></asp:BoundColumn>
</Columns>
</asp:DataGrid>
</td>
</tr>
</ItemTemplate>
<FooterTemplate></table></FooterTemplate>
</asp:Repeater>以下为aspx.cs页面的绑定方式:
----------------------------------------------------------------
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{//GetTable你自己实现吧。
repMain.DataSource = GetTable("select * from 表1");
repMain.DataBind();
}
} protected void repMain_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemIndex == -1) return;
DataGrid dgJingQu = e.Item.FindControl("dgJingQu") as DataGrid;
DataGrid dgJiuDian = e.Item.FindControl("dgJiuDian") as DataGrid;
if (dgJingQu!=null)
{//加载景区
dgJingQu.DataSource = GetTable("select * from 表2");
dgJingQu.DataBind();
}
if (dgJiuDian != null)
{//加载酒店
dgJiuDian.DataSource = GetTable("select * from 表3");
dgJiuDian.DataBind();
}
}
我服了。1个repeater加html代码输出段为了什么显示比三个高深那就是LZ问的吗?前面都说过了建议用全动态输出repeater不能代替布局。。
--------------
楼主你把我的代码执行一下,肯定没问题,我经常用到这种多层嵌套的绑定,分页也可以实现,但你需要在那个内层绑定时处理页码,你想想,数据能读出第一页就能读出第二页。有一些东西,你不敢想,但不代表不能做。如果按输入html的方法,你倒不如回去用asp算了。
.net控件太高级了可能用不了。
代码,你可以参考一下 <asp:Repeater ID="RepeaterShopping" runat="server" onitemdatabound="RepeaterShopping_ItemDataBound" >
<ItemTemplate>
<table class="RepeaterShoppingCss" width="100%" style="margin-bottom:20px;">
<tr class=" size16 " valign="bottom">
<td align="right" style=" width:10%; height:23px;"><input id="cBox" type="checkbox" class="cBoxCss" checked="checked" />卖家:</td>
<td ><a href="#"><%#DataBinder.Eval(Container.DataItem,"RealName") %></a></td>
</tr>
<tr>
<td colspan="2">
<asp:Repeater ID="RepeaterProduct" runat="server" OnItemDataBound="RepeaterProduct_ItemDataBound">
<ItemTemplate>
<table width="100%" class="RepeaterProductCss">
<tr>
<td align="right" style=" width:15%;"><input id="cBoxProduct" class="cBoxProductCss" type="checkbox" runat="server" checked="checked" value='<%#DataBinder.Eval(Container.DataItem, "ProductID") %>' />商品名称:</td>
<td style=" width:30%"><%#DataBinder.Eval(Container.DataItem, "ProductName")%></td>
<td >单价:<span class="RealPriceCss" style="display:none"></span></td>
<td>
<asp:Repeater ID="RepeaterPrice" runat="server">
<ItemTemplate>
<div class="PriceCss" min='<%#Eval("QuantityIntervalMin") %>' max='<%#Eval("QuantityIntervalMax")%>' price='<%#Eval("Price","{0:0.##}") %>'>
<%#Eval("QuantityIntervalMin") %>~<%#Eval("QuantityIntervalMax")%>件:<%#Eval("Price","{0:0.##}") %>元
</div>
</ItemTemplate>
</asp:Repeater>
</td>
<td style=" width:15%">总数量:<span class="SumQuantityCss"></span></td>
<td style=" width:15%">金额:<span class="colorju"></span></td>
</tr>
<tr>
<td colspan="6" align="center">
<asp:Repeater ID="RepeaterDetail" runat="server">
<ItemTemplate>
<table width="100%" class="RepeaterDetailCss">
<tr class="color size12">
<td style=" width:5%; background-color:#FFFFFF;"></td>
<td style=" width:10%"><input id="cBoxDetail" class="cBoxDetailCss" type="checkbox" runat="server" checked="checked" value='<%#DataBinder.Eval(Container.DataItem, "ProductDetailID")%>' /></td>
<td style=" width:40%; height:64px;"><%#DataBinder.Eval(Container.DataItem,"ProductName") %></td>
<td style=" width:10%"><%#DataBinder.Eval(Container.DataItem, "ColorName")%></td>
<td style=" width:10%"><%#DataBinder.Eval(Container.DataItem, "SizeName")%></td>
<td style=" width:15%"><Chsoft:SmartNumericTextBox ID="SmartQuantity" CssClass="QuantityCss" Width="100px" runat="server" Text='<%#Eval("Quantity") %>'></Chsoft:SmartNumericTextBox></td>
<td style=" width:10%"><asp:LinkButton ID="lbtnDelete" runat="server" CommandName="DeleteDetail" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "ID")%>' OnCommand="LbtnOperate_Command">删除</asp:LinkButton></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
</td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
</td>
</tr>
<tr valign="bottom" style="height:40px;">
<td colspan="2" align="right" class="size14 bold">总价(不包含运费):<span class="sumAmountCss">787885.00</span>元</td>
</tr>
<tr>
<td colspan="2" align="right">
<asp:Button ID="Button2" runat="server" CssClass="mybutton01" Text="再逛逛" CommandName="LookSumbit" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"SellMemberID") %>' OnCommand="LbtnOperate_Command"/>
<asp:Button ID="Button1" runat="server" CssClass="mybutton03" Text="立即购买" CommandName="BuyerSumbit" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"SellMemberID") %>' OnCommand="LbtnOperate_Command"/>
</td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
服务端控件是很好用,我也经常使用.但不要走极端.
事实上,再复杂的页面,如果你一定要使用某种方法来实现的话,都一定可以实现出来,只不过是代价大或小而已.
楼主的问题,也是在这个范围内.repeater控件不是不可以做到,但复杂度\效率等并不会下降.相反,这种要求如果在后台拼HTML输出的话,可能还更快捷一些.在适当的地方,使用适当的方法;而不要在不适当的地方,使用不适当的方法.