본문 바로가기

ASP.NET

게시판 리스트 출력_ Repeater

테이블을 대게 다음과 같은 테이블 구조를 가진다.
<table>
    <tr>
        <th>글번호</th>
        <th>제목</th>
        <th>작성자</th>
        <th>작성일</th>
        <th>조회수</th>
    </tr>
    <tr>
        <th>1</th>
        <th>글제목</th>
        <th>홍길동</th>
        <th>2011.04.26</th>
        <th>14</th>
    </tr>
</table>

빨간색으로 표시된 <tr>의 내용이 게시판의 한 줄의 내용이 된다.

다음은 DB와 연결해서 DB에 저장된 글의 갯수만큼
화면에 게시물을 출력하기 위한 많은 방법 중 Repeater를 사용한 방법이다.

<asp:Repeater ID="DataListTable" runat="server" OnItemDataBound="DataListTable_ItemDataBound" EnableViewState="false">
    <HeaderTemplate>
    <table class="tblList">
    <caption><asp:Label ID="tableCaption" runat="server" Text="" EnableViewState="false"></asp:Label></caption>
    <tr>
        <th>글번호</th>
        <th>제목</th>
        <th>작성자</th>
        <th>작성일</th>
        <th>조회수</th>
    </tr>
    </HeaderTemplate>
    <ItemTemplate>
    <tr>
        <td align="center"><%#Eval("idxNum") %></td>
        <td align="center"><%#Eval("Title") %></td>
        <td align="center"><%#Eval("Name") %></td>
        <td align="center"><%#Eval("Date") %></td>
        <td align="center"><%#Eval("Visit") %></td>
    </tr>
    </ItemTemplate>
    <FooterTemplate>
    <tr runat="server" id="_EmptyData" visible="true" EnableViewState="false">
        <td align="center" height="300" colspan="5">등록된 게시글이 없습니다.</td>
    </tr>
    </table>
    </FooterTemplate>
</asp:Repeater>


테이블의 내용을 repeater로 감싸준다.
여기서! HeaderTemplate FooterTemplate은 한번씩, ItemTemplate만 반복적으로 출력된다는 걸 알아야한다.
따라서 게시판에 컬럼에 해당하는 부분은 헤더로, 글이없을 경우 띄어 줄 경고문은 푸터로 따로 빼주고
반복적으로 출력되야 할(게시글) 내용만  ItemTemplate으로 감싸준다.

aspx에서 위와같은 작업을 다 끝냈다면,
aspx.cs단에서 DB와 연결하고 따로 Repeater를 적용한 테이블을 컨드롤 해줘야한다.
(MemberLectureSetting거 컨트롤하는 작업을 하며, Page_Load에서 MemberLectureSetting()를 호출하요 실행한다.)
protected void MemberLectureSetting()
    {
        DataSet ds = new DataSet();
        ds = _MemberClass.Member_List_Default_Idx(_idx, "SP_MemberCollageLectureList", Page.Response);
        //DataRow row = _MemberClass.Member_View_Default_Idx(_idx, "SP_MemberCollage_View", Page.Response);
        if (ds != null)
        {
            DataListTable.DataSource = ds.Tables[0];
            DataListTable.DataMember = "DataListTable";
            DataListTable.DataBind();
        }
    }
    protected void DataListTable_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (_totCnt < 1)
        {
            if (e.Item.ItemType == ListItemType.Header)
            {
                Label tableCaption = (Label)e.Item.FindControl("tableCaption");
                tableCaption.Text = "";
            }
            else if (e.Item.ItemType == ListItemType.Footer)
            {
                HtmlTableRow lbl_footer = (HtmlTableRow)e.Item.FindControl("_EmptyData");
                lbl_footer.Visible = true;
            }
        }
        else
        {
            if (e.Item.ItemType == ListItemType.Header)
            {
                Label tableCaption = (Label)e.Item.FindControl("tableCaption");
                tableCaption.Text = "";
            }
            else if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                DataRowView row = (DataRowView)e.Item.DataItem;
            }
            else if (e.Item.ItemType == ListItemType.Footer)
            {
                HtmlTableRow lbl_footer = (HtmlTableRow)e.Item.FindControl("_EmptyData");
                lbl_footer.Visible = false;
            }
        }
    }


'ASP.NET' 카테고리의 다른 글

ASP.NET 접속자 IP찾기  (0) 2011.05.17
Enter를 <br / >로 바꿔주기  (0) 2011.05.16
StringBuilder  (0) 2011.04.14
ASP.NET 글 조회수 증가  (0) 2011.04.14
LastIndexOf  (0) 2011.04.13