재우니의 블로그



<div>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1"            
    onitemdatabound="Repeater1_ItemDataBound">
 <HeaderTemplate>
    <table border="1" cellpadding="3" cellspacing="3">
    <tr bgcolor="blue">
    <td><b>CustomerID</b>
    </td>
    <td><b>CompanyName</b>
    </td>
    <td><b>ContactName</b>
    </td>
    <td><b>ContactTitle</b></td>
    </tr>
</HeaderTemplate>
 <ItemTemplate>
     <tr>
     <td>
        <%#DataBinder.Eval!(Container.DataItem, "CustomerID")%>
     </td>
     <td>
        <%#DataBinder.Eval!(Container.DataItem, "CompanyName")%>   
     </td>
     <td>
        <%#DataBinder.Eval!(Container.DataItem, "ContactName")%>   
     </td>
     <td>
        <%#DataBinder.Eval!(Container.DataItem, "ContactTitle")%>   
     </td>
     </tr>
 </ItemTemplate>
 <FooterTemplate>
 </table>           
 </FooterTemplate>
 
</asp:Repeater>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
    SelectCommand="SELECT [CustomerID], [CompanyName], [ContactName],
    [ContactTitle], [Address] FROM [Customers] " >
</asp:SqlDataSource>

</div>



Repeater 로 간단하게 리스트로 보여주는 구문을 구현했는데요.

여기서 만약에 내용이 없을 경우 타이틀만 덩그러니 나오는 부분이 생기는데요. 결과물이야 뭐.. 맞습니다.

하지만 협업에서는 내용이 없을때는 하단에 "내용이 없습니다." 라고 표기해 주기를 원하죠.


이 부분을 구현해 볼까 합니다.


먼저 이 부분은 FooterTemplate 에서 처리할 수 있습니다.


위의 디자인을 약간 변경해 보겠습니다.


<FooterTemplate>
 <tr>
 <td>
 <asp:Label ID="lblEmptyData"
        Text="내용물이 없습니다." runat="server" Visible="false">
 </asp:Label>
 </td>
 </tr>
 </table>           

 </FooterTemplate>



내용물이 없을때는 lblEmptyData 의 label 을 보이도록 하고, 값이 있을 경우는 visible 를 false 를 해야 할겁니다.



이 부분에 대해 코드비하인드 단에 어떻게 구현해야 하는지 확인해 보겠습니다.


protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (Repeater1.Items.Count < 1)
        {
            if (e.Item.ItemType == ListItemType.Footer)
            {
                Label lblFooter = (Label)e.Item.FindControl("lblEmptyData");
                lblFooter.Visible = true;
            }
        }

    }



Repeater 의 바인딩 컨트롤에서 해당 item 의 count 가 1 이상일 경우 데이터가 존재하므로 FooterTemplate 에서 FindControl 함수를 이용하여 "내용물이 없습니다." 라고 표기할 label 컨트롤을 접근합니다. 

그리고 visible 속성에 true 을 처리 합니다.





감사합니다.


posted by  심재운(shimpark@gmail.com)