<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 을 처리 합니다.
감사합니다.