让Repeater显示多列的2种方法

注: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标记,这样控件状态就会一直保持下去。并且可以由你自由处理各种事件了。
感觉这样处理相对完美些,希望对大家有用!

 

 

一、下面的代码实现,每行显示三列

前台代码:
<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)
  {

   XmlSerializer ser = new XmlSerializer(typeof(DataSet));
   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 ();
  }

private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
  {
   if(i%3==0&&i>0)
   {
     e.Item.Controls.Add(new LiteralControl("</tr><tr>"));
   }
   i++;
  }

你可能感兴趣的:(html,server,table,asp,border,dataset)