그리고 화면을 대충 구성.
사용자 등록 페이지에 비해 정말 단촐하게...
실제로 등록된 것이라고는 버튼 2개와 "Literal" 하나 뿐...
일반적으로 리스트를 구성할때 "GridView" 를 많이 쓰지만, 여기서는 그냥 "Literal" 을 이용해 Html 로 처리 한다.
"GridView" 를 쓰면 쉽고 간단한 면이 있지만, 요즘은 "AJAX" 도 많이 쓰고 특히 "반응형웹" 등등... 별의별 요구사항 들을 다 적용하다 보면 차라리 그냥 "Html" 로 처리하는게 낫다.
[MemberList.aspx]
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MemberList.aspx.cs" Inherits="web_member_MemberList" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <link rel="stylesheet" href="../_style/_style.css" type="text/css" /> <link rel="stylesheet" href="../_style/table.css" type="text/css" /> <link rel="stylesheet" href="../_style/member.css" type="text/css" /> </head> <body> <form id="form1" runat="server"> <div class="wrap"> <asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel" runat="server"> <ContentTemplate> <!--↓↓↓↓↓여기서부터↓↓↓↓↓--> <div class="content"> <div class="title"> 회원관리 </div> <div class="body"> <asp:Literal ID="ltrTable" runat="server"></asp:Literal> </div> <div class="bottom"> <asp:Button ID="btnInsert" runat="server" Text="Write" alt="Write" OnClick="btnInsert_Click" /> <asp:Button ID="btnSearch" runat="server" Text="Search" alt="Search" OnClick="btnSearch_Click" /> </div> </div> <!--↑↑↑↑↑여기까지↑↑↑↑↑--> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>
[MemberList.cs]
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Site.FrameWork.BaseClass; using Site.FrameWork.Common; public partial class web_member_MemberList : WebBase { protected void Page_Load(object sender, EventArgs e) { } protected void btnSearch_Click(object sender, EventArgs e) { } protected void btnInsert_Click(object sender, EventArgs e) { } }
이렇게 대충 틀만 잡아 놓은뒤...
"cReturnValue.cs" 에 데이터셋을 리턴하는 구조체를 하나 추가.
그런 다음. "BizBase" 에 데이터 셋을 조회 하는 쿼리 실행기를 추가 한다. ...
그런 다음 데이터를 조회 하는 쿼리를 하나 만들어 주고...
[P_MEMBER_MemberList_SELECT01.sql]
IF (OBJECT_ID ('[dbo].[P_MEMBER_MemberList_SELECT01]', 'P') IS NOT NULL) BEGIN DROP PROCEDURE [dbo].[P_MEMBER_MemberList_SELECT01]; END GO /* ** Description: 1.회원 데이터를 조회한다. ** Author: Son10001 ** Create date: 2015-07-15 ** Sample: Exec P_MEMBER_MemberList_SELECT01 */ CREATE PROCEDURE [dbo].[P_MEMBER_MemberList_SELECT01] ( @intPageIndex int, @intPageSize int, @strLoginID varchar(100), @strLoginName varchar(25), @strGroup varchar(25) ) AS if (@strLoginID = '') begin set @strLoginID = '%' end else begin set @strLoginID = '%' + @strLoginID + '%' end if (@strLoginName = '') begin set @strLoginName = '%' end else begin set @strLoginName = '%' + @strLoginName + '%' end if (@strGroup = '') begin set @strGroup = '%' end else begin set @strGroup = '%' + @strGroup + '%' end BEGIN WITH MEMBER_ROW_NUMBER_LIST AS ( SELECT intNum, strLoginID, strGroup, strLoginPwd, strLoginName, strEmail, strBirthday, strHomePost, strHomeAddr1, strHomeAddr2, strHomeTel, strMobile, intVisit, strSignIP, strRegID, strModID, CONVERT(NVARCHAR(10), CONVERT(DATETIME, dateSignDate) , 121) AS dateSignDate, CONVERT(NVARCHAR(10), CONVERT(DATETIME, dateRegDate) , 121) AS dateRegDate, CONVERT(NVARCHAR(10), CONVERT(DATETIME, dateModDate) , 121) AS dateModDate, ROW_NUMBER() OVER (ORDER BY strLoginID DESC) AS ROW_INDEX FROM T_MEMBER_LIST WHERE strLoginID LIKE @strLoginID AND ISNULL(strLoginName, '') LIKE @strLoginName AND ISNULL(strGroup, '') LIKE @strGroup ) SELECT * FROM MEMBER_ROW_NUMBER_LIST WHERE ROW_INDEX >= @intPageIndex + 1 AND ROW_INDEX < @intPageSize + @intPageIndex + 1 ORDER BY strLoginID DESC SELECT COUNT(*) FROM T_MEMBER_LIST WHERE strLoginID LIKE @strLoginID AND ISNULL(strLoginName, '') LIKE @strLoginName AND ISNULL(strGroup, '') LIKE @strGroup END그리고 비즈 단에 처리 로직을 작성...
일단 검색 파라메터를 넘겨줄 데이터 형태를 하나 만들어 주고...
기본적으로 현재 페이지, 페이지당 아이템 갯수는 지정되어야 하고, 검색 조건으로 사용자 아이디, 사용자 명, 그룹... 등등... 을 지정 할 수 있게 만듬. 이건 필요하다면 늘일 수도 ... 줄일 수도 있음. 그리고 리스트 조회 처리 로직을 작성... 위에서 만든 검색 조건을 파라메터로 넘겨 주면 그것으로 쿼리를 실행하여 결과 값을 돌려 줌.
기본적으로 현재 페이지, 페이지당 아이템 갯수는 지정되어야 하고, 검색 조건으로 사용자 아이디, 사용자 명, 그룹... 등등... 을 지정 할 수 있게 만듬. 이건 필요하다면 늘일 수도 ... 줄일 수도 있음. 그리고 리스트 조회 처리 로직을 작성... 위에서 만든 검색 조건을 파라메터로 넘겨 주면 그것으로 쿼리를 실행하여 결과 값을 돌려 줌.
저기서 GetData() 가 실제 BizLayer 를 호출하고 웹페이지에 결과 값을 출력하는 부분.
[MemberList.cs]
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; using Site.Dac; using Site.FrameWork.BaseClass; using Site.FrameWork.Common; public partial class web_member_MemberList : WebBase { protected void Page_Load(object sender, EventArgs e) { } protected void btnSearch_Click(object sender, EventArgs e) { GetData(); } protected void btnInsert_Click(object sender, EventArgs e) { } private void GetData(int pageIndex = 1) { cReturnValue.dsReturnValue dsReVal = new cReturnValue.dsReturnValue(); dsReVal.Result = 0; dsReVal.Data = null; dsReVal.Message = ""; Site.Biz.MemberBiz.MemSearch searchInfo = new Site.Biz.MemberBiz.MemSearch(); searchInfo.pageIndex = pageIndex; searchInfo.pageSize = 10; searchInfo.strLoginID = ""; searchInfo.strGroup = ""; searchInfo.strLoginName = ""; // Biz 생성 using (Site.Biz.MemberBiz biz = new Site.Biz.MemberBiz()) { dsReVal = biz.list (searchInfo); if (dsReVal.Result < 0) // 그룹 등록 { ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType() , "SysMessage", "alert('" + dsReVal.Message.Replace("'", "\\'").Replace("\r\n", "\\r\\n") + "')" , true); return; } } string strList = string.Empty; int itemNum; ltrTable.Text = ""; strList = @" <table class='tb_BlackLine' style='width:100%;'> <colgroup> <col width='100'></col> <col width='100'></col> <col></col> <col></col> <col width='150'></col> <col width='100'></col> </colgroup> <tr class='head'> <th bgcolor='f4f4f4'><strong>번호</strong></th> <th bgcolor='f4f4f4'><strong>아이디</strong></th> <th bgcolor='f4f4f4'><strong>성명</strong></th> <th bgcolor='f4f4f4'><strong>e-Mail</strong></th> <th bgcolor='f4f4f4'><strong>등록일</strong></th> <th bgcolor='f4f4f4'><strong>그룹</strong></th> </tr> "; for (itemNum = 0; itemNum < dsReVal.Data.Tables[0].Rows.Count; itemNum++) { strList += @" <tr> <td>" + dsReVal.Data.Tables[0].Rows[itemNum]["intNum"].ToString() + @"</td> <td><a href='MemberEntry.aspx?SMODE=UPDATE&USER_ID=" + dsReVal.Data.Tables[0].Rows[itemNum]["strLoginID"].ToString() + @"'>" + dsReVal.Data.Tables[0].Rows[itemNum]["strLoginID"].ToString() + @"</a></td> <td><a href='MemberEntry.aspx?SMODE=UPDATE&USER_ID=" + dsReVal.Data.Tables[0].Rows[itemNum]["strLoginID"].ToString() + @"'>" + dsReVal.Data.Tables[0].Rows[itemNum]["strLoginName"].ToString() + @"</a></td> <td><a href='MemberEntry.aspx?SMODE=UPDATE&USER_ID=" + dsReVal.Data.Tables[0].Rows[itemNum]["strLoginID"].ToString() + @"'>" + dsReVal.Data.Tables[0].Rows[itemNum]["strEmail"].ToString() + @"</a></td> <td>" + dsReVal.Data.Tables[0].Rows[itemNum]["dateRegDate"].ToString() + @"</td> <td>" + dsReVal.Data.Tables[0].Rows[itemNum]["strGroup"].ToString() + @"</td> </tr> "; } if (itemNum != 10) { while (itemNum < 10) { strList += @" <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> "; itemNum++; } } strList += @"</table>"; ltrTable.Text = strList; } }
보다 시피, 그냥 직접 html 을 일일이 만들어 찍고 있다. "GridView" 를 쓰는것보다, 그닥 효율적인 방법은 아니지만, 이해하기가 쉽고, 입맛대로 얼마든지 세세한 컨트롤을 할 수 있다는 장점은 있다. 좀더 다듬는다면 StringBulider 를 쓰는게 좋겠지만, 이렇게 한다고 서버가 다운되고 그러지는 않으니 편한대로 쓰면 된다. ^^; 다 되었으면... 페이지를 실행하고...
저기 "Search" 를 클릭하면...
이렇게 사용자 목록을 조회 해 준다.
일단, 각 사용자를 클릭시 사용자 편집 페잊로 이동하게 링크는 잡혀있다. 요건 담에 구현하고...
아... 페이징... 다음에 ... 하자...
페이징... 귀찮아...