asp.net 리피터를 이용한 게시판

0
답변 1 asp.net 리피터를 이용한 게시판 답변 1 (/p/csharp)
protected void Page_Load(object sender, EventArgs e) { SqlConnection con = new SqlConnection(); String sql = "SELEC..

<%@ Page Title="" Language="C#" MasterPageFile="~/GP/MasterPage.master" Debug="true"%>
<%@ Import Namespace="System.Data.SqlClient" %>


<script runat="server">
    
    protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection();

        String sql = "SELECT num,title,UserID,writedate,readcount,depth,refer,pos From GPBoard ORDER BY refer asc, pos";
        SqlCommand cmd = new SqlCommand(sql, con);
        //cmd.Parameters.AddWithValue("@UserID", Page.User.Identity.Name);

        con.Open();

        SqlDataReader rd = cmd.ExecuteReader();

        Repeater1.DataSource = rd;
        Repeater1.DataBind();
        rd.Close();
        con.Close();
    }

    protected void btnWrite_Click(object sender, EventArgs e)
    {
        Response.Redirect("BoardW.aspx?Action=Write");
    }

    public string SetSpace(int depth)
    {
        if (depth == 0) return "";

        string strSpace = "";

        for (int i = 0; i < depth; i++)
        {
            strSpace += "&nbsp;&nbsp;&nbsp;";
        }
        strSpace += "└>";
        return strSpace;

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("MMain.aspx");
    }

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="Content1" Runat="Server">    
    <style type="text/css">
        table.type10 {
    border-collapse: collapse;
    text-align: center;
    line-height: 1.5;
    border-top: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
    margin: 10px 5px;
}
table.type10 thead th {
    width: 50px;
    padding: 10px;
    font-weight: bold;
    vertical-align: top;
    color: #fff;
    background: #e7708d;
    margin: 20px 10px;
}
table.type10 tbody th {
    width: 50px;
    padding: 10px;
}
table.type10 td {
    width: 250px;
    padding: 10px;
}
table.type10 .even {
    background: #fdf3f5;
}
    </style>
    <div>
        <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
        <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <link rel="stylesheet" href="BoardList.css" />
              <p style="text-align:center"> <h5><font size="4"><font color="red">HealthManager Community</font></font></h5></p>
            <hr />

            <asp:Repeater ID="Repeater1" runat="server" >
                <HeaderTemplate>
                    <table class="type10">
                      <thead>
                            <tr style="background-color: #fff" >

                                <td scope="cols">번호</td>
                                <td scope="cols">제목</td>
                                <td scope="cols">아이디</td>
                                <td scope="cols">작성일</td>
                            </tr>
                     </thead>
                </HeaderTemplate>
                <ItemTemplate>
                      <tbody>
                    <tr style="background-color: #fff"  onmouseover="this.style.background='skyblue'" onmouseout="this.style.background='white'" 
                        onClick="location.href='BoardV.aspx?No=<%# Eval("num") %>'">
                            <td><%# Eval("num") %></td>
                            <td><%# Eval("title") %></td>
                            <td><%# Eval("UserID") %></td>
                            <td><%# Eval("writedate") %></td>
                        </tr>
                </ItemTemplate>
              
                <AlternatingItemTemplate>
                    <tr style="background-color: #fff" onmouseover="this.style.background='skyblue'" onmouseout="this.style.background='white'" 
                        onClick="location.href='BoardV.aspx?No=<%# Eval("num") %>'">
                            <td><%# Eval("num") %></td>
                            <td><%# Eval("title") %></td>
                            <td><%# Eval("UserID") %></td>
                            <td><%# Eval("writedate") %></td>
                        </tr>
                </AlternatingItemTemplate>
                <FooterTemplate>
                    </table>
                </FooterTemplate>
            </asp:Repeater>


              <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyDBConnectionString %>" SelectCommand="SELECT * FROM [GPBoard]"></asp:SqlDataSource>
  
              <asp:SqlDataSource ID="MyDBConnectionString" runat="server" ConnectionString="<%$ ConnectionStrings:MyDBConnectionString %>" SelectCommand="SELECT * FROM [GPBoard]"></asp:SqlDataSource>  

            <br />
        
            <div class="row">
                <div class="col-sm-4 align-center">    
            <asp:Button ID="btnWrite" runat="server" Text="글쓰기" OnClick="btnWrite_Click" class="btn btn-secondary"/>
                    </div>
                <div class="col-sm-4">
                    
                </div>
                <div class="col-sm-4 align-right">
            <asp:Button ID="Button1" runat="server" Text="메인으로" OnClick="Button1_Click" class="btn btn-primary"/>
                </div>
                </div>
        
    </div>
</asp:Content>

게시판에 page를 나누려고 하는데요

GridView를 이용하면 쉽게 할 수 있지만 사정으로 리피터를 이용해서 게시판을 만들게 되었습니다.

리피터를 이용해서 페이징과 글의 한 페이지당 글 개수를 정하는 법좀 알려주세요~

21일 전 정진짱
+
정진짱 님께서 21일 전에 C#에 올린 질문
댓글 쓰기

1개의 답변

0
[답변]asp.net 리피터를 이용한 게시판 (/p/csharp)
아래 코드가 참고가 되시기 바랍니다. 먼저 아래는 마크업 부분입니다. 그리고 아래 코드를 참고해보시기 바랍니다. // 현재 페..

아래 코드가 참고가 되시기 바랍니다.

먼저 아래는 마크업 부분입니다.

<div style="overflow: hidden;">

	<asp:Repeater ID="rptPaging" runat="server" OnItemCommand="rptPaging_ItemCommand">
	 <ItemTemplate>
	  <asp:LinkButton ID="btnPage"
	   style="padding:8px;margin:2px;background:#ffa100;border:solid 1px #666;font:8pt tahoma;"
	   CommandName="Page" CommandArgument="<%# Container.DataItem %>"
	   runat="server" ForeColor="White" Font-Bold="True">
	    <%# Container.DataItem %>
	  </asp:LinkButton>
	 </ItemTemplate>
	</asp:Repeater>

</div>

그리고 아래 코드를 참고해보시기 바랍니다.

// 현재 페이지 번호
public int PageNumber
{
    get
    {
        if (ViewState["PageNumber"] != null)
        {
            return Convert.ToInt32(ViewState["PageNumber"]);
        }
        else
        {
            return 0;
        }
    }
    set { ViewState["PageNumber"] = value; }
}

....

protected void Page_Load(object sender, EventArgs e)
{
    BindRepeater();
}

private void BindRepeater()
{
    // DB 연결하고 데이터 가져오기
    SqlConnection cn = new SqlConnection(yourConnectionString);
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = cn;
    SqlDataAdapter ad = new SqlDataAdapter(cmd);
    cmd.CommandText = "Select * from YourTable";

    // DataTable에 데이터 저장하기
    DataTable dt = new DataTable();
    ad.SelectCommand = cmd;
    ad.Fill(dt);

    // 페이징에 사용될 PagedDataSource 생성하기
    PagedDataSource pgitems = new PagedDataSource();
    pgitems.DataSource = dt.DefaultView;
    pgitems.AllowPaging = true;

    // 페이지당 보여질 수 지정
    pgitems.PageSize = 4;
    pgitems.CurrentPageIndex = PageNumber;
    if (pgitems.PageCount > 1)
    {
        rptPaging.Visible = true;
        ArrayList pages = new ArrayList();
        for (int i = 0; i <= pgitems.PageCount - 1; i++)
        {
            pages.Add((i + 1).ToString());
        }
        rptPaging.DataSource = pages;
        rptPaging.DataBind();
    }
    else
    {
        rptPaging.Visible = false;
    }

    // 리피터에 DataSource 세팅하기 
    RepCourse.DataSource = pgitems;
    RepCourse.DataBind();
}

// 페이지 번호를 클릭할 때 실행되는 메소드
protected void rptPaging_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e)
{
    PageNumber = Convert.ToInt32(e.CommandArgument) - 1;
    BindRepeater();
}

 

16일 전 kimho
+
kimho 님께서 16일 전에 C#에 올린 글
사탕 주기
보관하기
댓글 쓰기
조회수 474
답글 1
URL