页面上用Repeater控件显示数据,显示的效果如下
怎么让它显示成这样的效果
注意是一个数据集
从数据库取出的每条数据,按照
1,2
3,4
5,6
7,8
这种样式的显示出来(其中,1,2,3,4等代表着一条数据)

解决方案 »

  1.   

    我再描述一下,每个表格 是一条数据,
    我想要的是
    表格1,表格2,
    表格3,表格4
    表格5,表格6
    表格7,表格8这八个表格都是从一个结果集中取得,
    例如sql语句:
    select 代码,名称,编号, 明细 from tb where ...这个结果集我用Repeater控件显示,
    现在做出来的效果是
    表格1,
    表格2,
    表格3,
    ....
    但是我想要的是
    表格1,表格2,
    表格3,表格4
    表格5,表格6
    表格7,表格8
    这种样式的
      

  2.   

    那个可以使用DataList,使用Repeater则不是恰当的。
      

  3.   


      <form id="form1" runat="server">
            <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
                <ItemTemplate>
                    <asp:Literal ID="Literal1" runat="server"></asp:Literal>
                </ItemTemplate>
            </asp:Repeater>
        </form>    protected void Page_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(string));
            dt.Columns.Add("Name", typeof(string));
            DataRow dr = null;
            for (int i = 1; i <= 5; i++)
            {
                dr = dt.NewRow();
                dr["ID"] = i.ToString();
                dr["Name"] = "Name" + i.ToString();
                dt.Rows.Add(dr);
            }
            this.Repeater1.DataSource = dt;
            this.Repeater1.DataBind();
        }    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            StringBuilder sb = new StringBuilder();        switch ((e.Item.ItemIndex + 1) % 4)
            {
                case 1:
                    sb.AppendLine("<div style=\"clear:both;\"></div>");
                    sb.AppendLine("<div style=\"float:left;width:200px;\">");
                    break;
                case 2:
                    sb.AppendLine("<div style=\"width:200px;\">");
                    break;
                case 3:
                    sb.AppendLine("<div style=\"clear:both;\"></div>");
                    sb.AppendLine("<div style=\"float:left;width:200px;\">");           
                    break;
                case 0:
                    sb.AppendLine("<div style=\"width:200px;\">");
                    break;
            }
            sb.AppendLine("<table border=\"1\" width=\"100%\">");
            sb.AppendLine("<tr>");
            sb.AppendLine("<td>");
            DataRowView drv = e.Item.DataItem as DataRowView;
            sb.AppendLine(drv["Name"].ToString());
            sb.AppendLine("</td>");
            sb.AppendLine("</tr>");
            sb.AppendLine("</table>");       // if ((e.Item.ItemIndex + 1) % 2 == 0)
            {
                sb.AppendLine("</div>");
            }        Literal lit = e.Item.FindControl("Literal1") as Literal;        if (lit != null)
            {
                lit.Text = sb.ToString();
            }
        }
      

  4.   

    利用css
    用<div id="div1">一个总得div 的宽度width设为你要重复区域div2 width的2倍,
      <asp:repeater>
    <ItemTemplate>
    <div id="div2"></div>  //要重复的区域,style设置为float:left,这样两个div2就可以并排了,第 
    </ItemTemplate>
    </repeater>               3个div就被挤到第二行去了,5被挤到第三行,依次
    </div>
      

  5.   


    拜托 Repeater 控件比DataList干净多了,DataList很少用建议楼主用 js 控制,还是不会的话去蓝色理想论坛问下,那是美工可以干的事。
      

  6.   

    嗯,DataList就是做这个的。你只要指定RepeatDirection 和 RepeatColumns 两个属性就可以了RepeatLayout 根据需要设置。当然 Repeater 也可以实现此效果。http://topic.csdn.net/u/20090827/16/cfdc1335-1da2-4839-9c43-76d2623f31f9.html
      

  7.   

    解决了,
    用的是Repeater控件
    页眉页脚放table
    <HeaderTemplate>
     <table>
    </HeaderTemplate>
    <FooterTemplate>
     </table>
    </FooterTemplate>  然后在
    <ItemTemplate>
    <tr>
    <td>
      <table></table> -- 放个table
    <td>
    </ItemTemplate><AlternatingItemTemplate>
    <td>
      <table></table> -- 放个table
    <td>
    </tr>
    </AlternatingItemTemplate>
    这样运行起来就是我想要的哪种格式了
      

  8.   

    嗯,就是这个思路。不过要注意的是 如果是奇数项的时候 要考虑 <td> 和<tr> 的闭合情况。