현재 보여지고 있는 게시물을 수정하는 기능을 구현해 보자. Panel을 사용하여 한 컨트롤 내에서 여러 가지 기능을 구현 하는 방법을 알아 본다.
ViewPost.ascx를 다음과 같이 수정한다.
<
asp:Panel
ID
="pnlViewPost"
Visible
=False
Runat
=server>
<
table
>
<
tr
class
="ViewPostSubject">
<
td
nowrap
>
제목:</td><tdwidth="100%"><asp:LabelID="lblSubject"Runat=server></asp:Label></td>
</
tr
>
<
tr
>
<
td
nowrap
>
글쓴이:</td><tdwidth="100%"><asp:LabelID="lblCreator"Runat=server></asp:Label></td>
</
tr
>
<
tr
>
<
td
nowrap
>
날짜:</td><tdwidth="100%"><asp:LabelID="lblCreateDate"Runat=server></asp:Label></td>
</
tr
>
<
tr
class
="ViewPostBodyText">
<
td
colspan
="2"><
asp:Label
ID
="lblBodyText"
Runat
=server></
asp:Label
></
td
>
</
tr
>
<
tr
>
<
td
><
asp:LinkButton
ID
="EditPost"
Runat
=server>
수정</asp:LinkButton></td>
</
tr
>
</
table
>
</
asp:Panel
>
<
asp:Panel
ID
="pnlEditPost"
Visible
=False
Runat
=server>
<
table
>
<
tr
>
<
td
>
<
label
>
제목:</label><asp:TextBoxID="tbSubject"Runat=server></asp:TextBox>
</
td
>
</
tr
>
<
tr
>
<
td
>
<
asp:TextBox
ID
="tbBodyText"
Runat
=server
TextMode
=MultiLine
Rows
=20
Width
="500px"
Wrap
=True></
asp:TextBox
>
</
td
>
</
tr
>
<
tr
>
<
td
>
<
asp:LinkButton
ID
="lbSavePost"
Runat
=server>
저장</asp:LinkButton>
<
asp:LinkButton
ID
="lbCancelPost"
Runat
=server>
취소</asp:LinkButton>
</
td
>
</
tr
>
</
table
>
</
asp:Panel
>
굵게 된 부분이 새로 추가된 부분이다. 특별한 것은 없고 새로운 Panel안에 게시물 수정에 관한 폼을 디자인 했다. 두 개의 Panel은 기본적으로 보여지지 않는 상태이며(Visible=False) 필요에 따라 적절한 Panel을 보이게 하는 방식을 사용한다. 코드를 보자.
private
void Page_Load(object sender, System.EventArgs e)
{
PostController pc = new PostController();
if(Session["CPostSystemID"] == null)
return;
pnlViewPost.Visible = true;
pnlEditPost.Visible = false;
PostInfo pi = pc.Get((int)Session["CPostSystemID"]);
lblSubject.Text = pi.Subject;
lblCreator.Text = pi.CreatorName;
lblCreateDate.Text = pi.CreateDate.ToString();
lblBodyText.Text = pi.BodyText;
}
private
void EditPost_Click(object sender, EventArgs e)
{
pnlEditPost.Visible = true;
pnlViewPost.Visible = false;
PostController pc = new PostController();
PostInfo pi = pc.Get((int)Session["CPostSystemID"]);
tbSubject.Text = pi.Subject;
tbBodyText.Text = pi.BodyText;
}
기본 Page_Load에서는 ViewPost Panel이 보이게 하고 수정 버튼을 누르면 EditPost Panel을 보이게 한다. 게시물 DB에서 내용을 가져와서 각각의 TextBox에 넣어준다. “저장”을 클릭 하면 다음 루틴이 실행된다.
private
void lbSavePost_Click(object sender, EventArgs e)
{
PostController pc = new PostController();
PostInfo pi = pc.Get((int)Session["CPostSystemID"]);
pi.PostSystemID = (int)Session["CPostSystemID"];
pi.CreateDate = DateTime.Now;
pi.Subject = tbSubject.Text;
pi.BodyText = tbBodyText.Text;
pc.Update(pi);
Response.Redirect(Request.RawUrl);
}
TextBox의 새로운 값을 가져와서 DB를 업데이트하고 현재 페이지를 갱신한다. 페이지를 갱신하면 수정 모드에서 게시물 보기 모드로 다시 빠져 나가게 된다. 구현된 화면은 다음과 같다.
소스: http://www.code99.net/tabid/842/ItemID/26/Default.aspx