Tuesday, September 07, 2010
Retabbed
Login | Register
아티클
  Search
ASP.NET으로 만드는 게시판 - [8]글 번호 매기기
ASP.NET으로 만드는 게시판 - [8]글 번호 매기기

글 번호는 게시물의 앞에 표시되는 번호로 글 번호가 없는 게시판들도 있으나 게시물을 사용자가 안내하고자 할 때 몇 번 게시물을 참고하라는 식의 이용사례가 많이 있으므로 게시물 번호를 구현해 보도록 한다. 더불어 삭제 링크를 누를 경우 정말 삭제 할 것인지를 묻는 클라이언트 코드를 붙이는 방법도 보도록 한다.

게시물 번호는 게시판 별로 따로 관리하여야 하므로(이 게시판의 목표는 여러 개의 게시판을 동시적으로 사용할 수 있도록 하는 것에 있음을 잊지 말자) 마지막 게시물의 번호를 기억하고 있을 DB테이블이 필요하게 된다. 이 테이블을 DNBBS라고 부르자. 아래는 테이블의 생성 스크립트이다. 쿼리 분석기에서 실행하면 기존 테이블을 삭제하고 새롭게 만들게 된다.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DNBBS]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[DNBBS]
GO

CREATE TABLE [dbo].[DNBBS] (
 [BBSID] [int] IDENTITY (1, 1) NOT NULL ,
 [LastPostNo] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[DNBBS] WITH NOCHECK ADD
 CONSTRAINT [PK_DNBBS] PRIMARY KEY  CLUSTERED
 (
  [BBSID]
 )  ON [PRIMARY]
GO

앞으로는 게시판 관리를 위한 다양한 열 들이 추가 되겠지만 현재로선 LastPostNo만 있다. 이 열에 해당 게시판의 마지막 글 번호를 저장해 두는 것이다. 표를 하나 생성했으니 그에 해당하는 DataController를 만들어야 한다. 간단히 다음과 같이 구현하면 된다.

        public class BBSController

        {

 

               string myConnString = "Server=localhost;Database=DotNetBBS;uid=lcw;pwd=enter99;";

 

               public BBSController()

               {

               }

 

               public BBSInfo Get(Int32 BBSID)

               {

                       SqlConnection myConnection = new SqlConnection(myConnString);

                       myConnection.Open();

 

                       string myQuery =

                              string.Format("select BBSID,LastPostNo from DNBBS where BBSID={0}", BBSID);

 

                       BBSInfo bi = new BBSInfo();

                       SqlCommand myCommand = new SqlCommand(myQuery, myConnection);

                       SqlDataReader dr = myCommand.ExecuteReader();

                       while(dr.Read())

                       {

                              bi.BBSID = dr.GetInt32(0);

                              bi.LastPostNo = dr.GetInt32(1);

                       }

                       dr.Close();

 

                       myConnection.Close();

 

                       return bi;

               }

 

               public void Update(BBSInfo bi)

               {

                       SqlConnection myConnection = new SqlConnection(myConnString);

                       myConnection.Open();

 

                       string myQuery = string.Format(

                              "update DNBBS set " +

                              "LastPostNo='{0}' " +

                              "where BBSID={1}", bi.LastPostNo, bi.BBSID);

                       SqlCommand myCommand = new SqlCommand(myQuery, myConnection);

                       myCommand.ExecuteNonQuery();

 

                       myConnection.Close();

               }

              

        }

Get과 Update 함수만 구현하였다. 이제 게시물을 추가하는 부분을 수정하도록 하자.

               private void AddNewPost_Click(object source, System.EventArgs e)

               {

                       PostController pc = new PostController();

                       PostInfo pi = new PostInfo();

 

                       pi.Subject = txtSubject.Text;

                       pi.BodyText = txtBodyText.Text;

 

                       pi.CreatorID = 1;

                       pi.CreatorName = "Tester";

                       pi.BBSID = 1;

                       pi.PostIndent = 0;

 

                       BBSController bc = new BBSController();

                    BBSInfo bi = bc.Get(pi.BBSID);

                    pi.PostNo = ++bi.LastPostNo;

                    pi.SysPostNo = pi.PostNo * 10000;

 

                       bc.Update(bi);

                       pc.Add(pi);

 

                       txtSubject.Text = "";

                       txtBodyText.Text = "";

 

                       Response.Redirect(Request.RawUrl);

               }

굵게 된 부분이 추가된 부분이다. DNBBS테이블에서 LastPostNo를 가져와서 하나를 증가 시킨 후 게시글에 넣고 DNBBS테이블에도 업데이트를 해준다. 이로서 이제 게시물은 게시물 번호를 가지고 추가되게 된다. 아래 화면을 참고 하자.

PostNoAndDeleteConfirm.gif

글 번호가 하나씩 증가하면서 추가되고 있다. 화면에 나오는 “정말 삭제 할까요?” 다이얼로그는 삭제 링크버튼을 누를 때 나오는 것인데 삭제 버튼은 DataGrid내에 있으므로 단순히 ascx파일에 클라이언트 스크립트를 작성하는 방법으로는 어렵다. ListPost.ascx.cs 파일에 다음 루틴을 추가한다.

private void PostList_ItemDataBound(object sender, DataGridItemEventArgs e)

               {

                       LinkButton lb = (LinkButton)e.Item.FindControl("DeletePost");

                       if(lb != null)

                              lb.Attributes.Add("onClick", "return confirm(' 정말 삭제 할 까요?');");

               }

PostList DataGrid의 ItemBound를 잡아 각 삭제 버튼에 Attribute를 추가하는 방법으로 스크립트를 추가 하고 있다. HyperLink의 경우에는 OnClink의 리턴 값이 거짓이면 링크를 클릭하지 않은 것으로 처리하므로 위의 간단한 코드 추가 만으로 삭제 확인 다이얼로그는 완결된다.

 

프로젝트 소스: http://www.code99.net/tabid/842/ItemID/27/Default.aspx


게시일자 Monday, January 23, 2006 (Archive on Monday, January 30, 2006)
게시자: 불나방  저자: 불나방
돌아가기

평점:
평가:
평가 올리기

현재평점평균: 3.00
평점: 3
as
Terms | Privacy | host
Copyright 2005 Code99.NET
 | 아티클 | 자료실 | 블로그 | Q&A | 관리자에게