注:repeater控件不会像datalist控件那样生成多余的<tr><td>标记
方法1.
<table>
<tr>
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<td>
<%#DataBinder.Eval(Container.DataItem,"something")%>
</td>
</ItemTemplate>
</asp:Repeater>
</tr>
</table>
即:将Repeater嵌入表格的一行中,然后在ItemDataBound事件中添加:e.Item.Controls.Add(new LiteralControl("</tr><tr>"));
方法2.
<asp:Repeater runat="server" ID="repeater1" OnItemDataBound="Repeater1_ItemDataBound">
<HeaderTemplate>
<table width="100%" border="0" align="center">
<tr>
</HeaderTemplate>
<ItemTemplate>
<td>
<%#Eval("something")%>
</td>
</ItemTemplate>
<FooterTemplate>
</tr></table>
</FooterTemplate>
</asp:Repeater>
即:将Repeater的ItemTemplate在表格的一行中处理,然后同样在在ItemDataBound事件中添加:e.Item.Controls.Add(new LiteralControl("</tr><tr>"));
方法1与方法2殊路同归,效果一样,但是我本人比较喜欢第二种。
补充:方法1与方法2虽然都可以实现页面效果,但是并不是完美无缺。在出现以下绑定代码时
<ItemTemplate>
<td>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="link" Text='<%# Eval("CategoryName") %>' CommandArgument='<%# Eval("Id") %>'></asp:LinkButton>
</td>
</ItemTemplate>
如果点击LinkButton1,哪么页面样式又会返回初始时样式,,怎么办呢?解决办法就是在td之后添加Literal控件,让Literal控件内容根据需要动态生成相应的html标记,这样控件状态就会一直保持下去。并且可以由你自由处理各种事件了。
感觉这样处理相对完美些,希望对大家有用!
一、下面的代码实现,每行显示三列 前台代码: 后台代码: XmlSerializer ser = new XmlSerializer(typeof(DataSet)); private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
<table>
<tr>
<asp:repeater id="Repeater1" runat="server">
<ItemTemplate>
<td><%#DataBinder.Eval(Container.DataItem,"thing")%></td>
</ItemTemplate>
</asp:repeater>
</tr>
</table>
protected int i=1;
private void Page_Load(object sender, System.EventArgs e)
{
DataSet ds = new DataSet("myDataSet");
DataTable t = new DataTable("table1");
DataColumn c = new DataColumn("thing");
t.Columns.Add(c);
ds.Tables.Add(t);
DataRow r;
for(int i = 0; i<10;i++)
{
r = t.NewRow();
r[0] = i;
t.Rows.Add(r);
}
this.Repeater1 .DataSource =ds.Tables [0].DefaultView ;
this.Repeater1.DataBind ();
}
{
if(i%3==0&&i>0)
{
e.Item.Controls.Add(new LiteralControl("</tr><tr>"));
}
i++;
}