SetListItem

SetListItem 함수는 DropDownList, RadioButtonList 및 CheckBoxList 등 ListItem을 가지는 컨트롤에 데이터를 쉽게 바인딩하기 위한 함수입니다.
SetListItem 함수를 사용하기 위해서는 SQL Server 프로시저 혹은 Oracle 프로시저가 필요합니다.
기본적인 프로시저 뼈대는 /Data 폴더에 있습니다.
SQL Server용: /Data/SQL Server/CHP_AJAX_CODEHELPER.sql
Oracle용: /Data/Oracle/PKG_BANANA.pks
해당 프로시저들을 적절히 수정하여 사용하시면 되겠습니다.
상기 프로시저들은 CodeHelper 컨트롤에서도 사용이 되고 있으니, 가급적이면 활용하시는 것이 좋습니다.
그러면 잠시 프로시저를 살펴볼까요?
구조는 동일하니 SQL Server를 기준으로 설명 드리겠습니다.
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CHP_AJAX_CODEHELPER]') AND type in (N'P', N'PC'))
	DROP PROC CHP_AJAX_CODEHELPER
GO


/*

EXEC CHP_AJAX_CODEHELPER 'COMMON', 'A02', '', '', '', ''

*/
CREATE PROC [dbo].[CHP_AJAX_CODEHELPER]
(
	@CODEHELPERTYPE		VARCHAR(10)		--// 코드헬퍼 종류
	, @MAIN_CODE		CHAR(3)			--// 메인코드
	, @QUERY		NVARCHAR(100)		--// 검색어
	, @RESERVED1		NVARCHAR(100)		--// 예비필드1
	, @RESERVED2		NVARCHAR(100)		--// 예비필드2
	, @RESERVED3		NVARCHAR(100)		--// 예비필드3
)
AS
SET	NOCOUNT ON
--SET	XACT_ABORT ON
--BEGIN TRAN
BEGIN
	--////////////////////  변수선언 : S  ////////////////////
	--////////////////////  변수선언 : E  ////////////////////



	--////////////////////  유효성검사 : S  ////////////////////
	--////////////////////  유효성검사 : E  ////////////////////



	--////////////////////  비즈니스로직 : S  ////////////////////

	--// 공통코드
	IF (@CODEHELPERTYPE = 'COMMON')
		BEGIN
		SELECT	A.TOTAL_CODE		AS TOTAL_CODE
			, B.CODE_NAME		AS GROUP_NAME
			, A.CODE_NAME		AS CODE_NAME
			, A.SUB_CODE		AS SUB_CODE
			, A.BIGO1		AS BIGO
		FROM	BASECODE		AS A
			INNER JOIN (
			SELECT	CODE_NAME
					, MAIN_CODE
			FROM	BASECODE
			WHERE	SUB_CODE	= '000'
			GROUP BY CODE_NAME, MAIN_CODE
			)			AS B		ON A.MAIN_CODE	= B.MAIN_CODE
		WHERE	A.MAIN_CODE		LIKE ISNULL(RTRIM(@MAIN_CODE), '') + '%'
		AND	A.CODE_NAME		LIKE ISNULL(@QUERY, '') + '%'
		AND	A.SUB_CODE		!= '000'
		AND	A.DISPLAYYN		!= '0'
		ORDER BY A.ORDERBY, A.TOTAL_CODE ASC
		END
	--// 인사정보
	ELSE IF (@CODEHELPERTYPE = 'HR')
		BEGIN
		SELECT	UserID			AS TOTAL_CODE
			, UserName		AS CODE_NAME
		FROM	TBL_USER
		WHERE	UserType		= @RESERVED1
		END
	--////////////////////  비즈니스로직 : E  ////////////////////
END


Error:


--IF @@ERROR <> 0
--	ROLLBACK TRAN
--ELSE
--	COMMIT TRAN
GO


위 BASECODE 테이블의 원시 데이터는 아래와 같습니다.
TOTAL_CODE MAIN_CODE SUB_CODE CODE_NAME
A01000 A01 000 성별
A01001 A01 001 여성
A01002 A01 002 남성
TOTAL_CODE가 A01000인 성별이라는 항목은 여성 및 남성이라는 코드를 가지는 코드그룹의 이름입니다.
자, 이제 DropDownList, RadioButtonList 및 CheckBoxList에 데이터를 바인딩 해보도록 하겠습니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="BoundDDL.aspx.cs" Inherits="BANANA.Web.Framework.Test.jmson.BoundDDL" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
	<title>SetListItem</title>
</head>
<body>
	<form id="form1" runat="server">
	<div>
		<asp:DropDownList ID="DropDownList1" runat="server" />
		<asp:RadioButtonList ID="RadioButtonList1" runat="server" />
		<asp:CheckBoxList ID="CheckBoxList1" runat="server" />
	</div>
	</form>
</body>
</html>

SetListItem 함수는 3개의 컨트롤에 대해서 각 3개씩의 함수, 즉 9개의 함수가 있습니다만...DropDownList를 기준으로 설명 드리겠습니다.
나머지 RadioButtonList와 CheckBoxList는 컨트롤만 달라지고 함수의 구조가 동일합니다.
/// <summary>
/// [DropDownList:SQL Server] 드랍다운리스트 바인딩 
/// </summary>
/// <param name="DropDownList">드랍다운리스트</param>
/// <param name="CodeHelperType">코드헬퍼 종류</param>
/// <param name="MainCode">메인코드</param>
public void SetListItem(DropDownList DropDownList, string CodeHelperType, string MainCode)
{
	// DropDownList는 System.Web.UI.WebControls.DropDownList 컨트롤입니다.
	// CodeHeplerType은 위 프로시저에서 @CODEHELPERTYPE에 해당하는 값입니다.
	//    CodeHelperType을 여러 가지로 나누어서 각각의 Database의 table에 있는 값들을 코드와 코드값의 형태로 반환할 수 있습니다.
	//    바인딩되는 값은 꼭!!! 코드는 TOTAL_CODE로, 코드값은 CODE_NAME으로 반환해 주세요.
	//  MainCode는 BASECODE에서 데이터를 조회할 때에만 사용합니다.
	//    BASECODE 테이블에서 MAIN_CODE 컬럼으로 필터링 할때에 사용합니다.
}


/// <summary>
/// [DropDownList:SQL Server] 드랍다운리스트 바인딩 
/// </summary>
/// <param name="DropDownList">드랍다운리스트</param>
/// <param name="CodeHelperType">코드헬퍼 종류</param>
/// <param name="MainCode">메인코드</param>
/// <param name="IsFirstRowEmpty">첫 아이템을 공백으로 비울 것인지 여부</param>
public void SetListItem(DropDownList DropDownList, string CodeHelperType, string MainCode, bool IsFirstRowEmpty)
{
	// IsFirstRowEmpty가 true이면, 첫 행에 공백값을 가지는 ListItem을 추가합니다.
}


/// <summary>
/// [DropDownList:SQL Server] 드랍다운리스트 바인딩 
/// </summary>
/// <param name="DropDownList">드랍다운리스트</param>
/// <param name="CodeHelperType">코드헬퍼 종류</param>
/// <param name="MainCode">메인코드</param>
/// <param name="Reserved1">예비필드1</param>
/// <param name="Reserved2">예비필드2</param>
/// <param name="Reserved3">예비필드3</param>
/// <param name="IsFirstRowEmpty">첫 아이템을 공백으로 비울 것인지 여부</param>
public void SetListItemS(DropDownList DropDownList, string CodeHelperType, string MainCode, string Reserved1, string Reserved2, string Reserved3, bool IsFirstRowEmpty)
{
	// Reserved1 ~ 3은 예비필드1 ~ 3입니다.
	//   프로시저에 @RESERVED1 ~ 3까지 전달되는 항목들입니다.
}


이제, 실제 바인딩 시키는 C# 코드를 살펴 보겠습니다.
코드는 DropDownList를 기준으로 설명 드리겠습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace BANANA.Web.Framework.Test.jmson
{
	public partial class BoundDDL : BANANA.Web.BasePage
	{
		protected void Page_Load(object sender, EventArgs e)
		{
			if (!IsPostBack)
			{
				try
				{
					base.SetListItem(
						DropDownList1
						, "COMMON"
						, "A01"
						);

					base.SetListItem(
						DropDownList1
						, "HR"
						, ""
						, "BONSA"
						, ""
						, ""
						, true
						);
				}
				catch (Exception err)
				{
					MessageBox.Show(err.HelpLink + "<br />" + err.Message
						, "Error"
						, MessageBox.MessageBoxType.Alert
						, MessageBox.MessageBoxIcon.Error
						);
				}
			}
		}
	}
}

SetListItem 함수의 사용방법이 이해되셨나요?
지금까지 SetListItem 함수의 사용방법이었습니다.

TOP