2013-10-05 35 views
2

我有一個項目列表要使用中繼器呈現,這些項目需要在表格佈局中以兩列呈現。此外,如果有奇數個項目,最後一個單元格將包含佔位符圖像。有什麼想法嗎?如何使用一個asp.net中繼器呈現兩列布局

防爆,我的列表[「字符串1」,」字符串2」 ,」 STRING3」 ,」串,4」 ,」 STRING5」 ] 顯示

<table> 
<tr> 
    <td>string1</td> 
    <td>string2</td> 
</tr> 
<tr> 
<td>string3</td> 
    <td>string4</td> 
</tr> 
<tr> 
<td>string5</td> 
    <td>string6</td> or [<td>Some place holder Imge if odd number </td>] 
    </tr> 
</table> 

這樣我結束了,看起來像這樣一個觀點

「的String1」,「字符串2」

「STRING3」「串,4」

「STRING5 」‘String6’

如果列表中有奇數個項目

‘的String1’,‘字符串2’

‘STRING3’‘串,4’

‘STRING5’「一些place holder image「

回答

2

我們可以在標記中呈現兩列。此外,我們必須添加一個佔位符,我們將在代碼中使用插入圖片:在最後一個項目的代碼檢查

<asp:Repeater ID="rptMyRepeater" runat="server" OnItemDataBound="rptMyRepeater_ItemDataBound"> 
    <HeaderTemplate> 
     <table> 
     <tr>  
    </HeaderTemplate> 
    <ItemTemplate> 
      <%# (Container.ItemIndex != 0 && Container.ItemIndex % 2 == 0) ? @"</tr><tr>" : string.Empty %> 
      <%# string.Format("{0}{1}{2}", @"<td>", Container.DataItem, @"</td>") %> 
     <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 
    </ItemTemplate> 
    <FooterTemplate> 
     </tr> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

現在並檢查是否爲奇數。如果是,添加圖像內的TD,追加TD佔位符:

protected void rptMyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     int count = ((List<string>)rptMyRepeater.DataSource).Count; 
     if (e.Item.ItemIndex != 0 && e.Item.ItemIndex % 2 == 0 && e.Item.ItemIndex == count - 1) 
     { 
      PlaceHolder PlaceHolder1 = e.Item.FindControl("PlaceHolder1") as PlaceHolder; 
      Image img = new Image(); 
      img.ImageUrl="pholder.jpg"; 
      TableCell td = new TableCell(); 
      td.Controls.Add(img); 
      PlaceHolder1.Controls.Add(td); 
     }  
    } 
} 

而且我用於測試的代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //rptMyRepeater.DataSource = new List<String>() { "String1", "String2", "String3", "String4", "String5", "String6" }; 
     rptMyRepeater.DataSource = new List<String>() { "String1", "String2", "String3", "String4", "String5" }; 
     rptMyRepeater.DataBind(); 

    } 
} 

希望它能幫助!