WebForm 데이터그리드로 데이터 전송 :: 데이터 보내기  


기존의 ASP에서 각각의 ASP 페이지로 데이터를 전송하는 방법으로 쿠키나 히든필드, 쿼리문자열, 세션변수를 주로 사용했다. 이러한 기술은 ASP.NET에서도 사용할 수 있다. 하지만 ASP.NET은 데이터그리드나 데이터리스트 같은 서버사이드 컨트롤이 있기 때문에 기존 ASP 방식을 따라하는 것은 현명하다고 할 수 없겠다.

코드비하인드 vs 서버사이드 스크립트

ASP.NET으로 작업을 한다면 이 두가지 방식중에 하나를 사용해야 한다.


서버사이드 스크립트 : 이 방법은 단순히 aspx파일에 <script-x runat="server">... code ...</script-x>처럼 사용함으로 가능하다. 기존의 ASP와 유사한 방식이다.

코드비하인드 : 이 방식은 aspx와 로직을 구현하는 코드가 있는 vb 또는 cs 파일로 각각 다른 2개의 파일을 생성한다. 후자의 경우 DLL로 컴파일되어 웹서버로 전해진다. 이 방식은 비쥬얼 스튜디오 닷넷의 기본방식이다.

서버사이드 스크립트를 사용하여 데이터그리드로 데이터 전달

다음의 두 aspx를 만들자.


SendingPage.aspx : 데이터그리드 컨트롤에서 값을 입력받아서 두번째 ReceivingPage.aspx로 이동한다.

ReceivingPage.aspx : SendingPage.aspx로 부터 호출되며 데이터그리드의 데이터를 읽어들인다.

데이터 보내기

다음은 SQL서버의 pubs 데이터베이스의 authors 테이블로부터 값을 가져와서 데이터그리드를 생성한다.

<%@ Page Language="VB" ClassName="SendingPage" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script-x runat="server">
Public ReadOnly Property GridData() As System.Object
Get
' Datasource of Datagrid1 is a data table inside a dataset
Return DataGrid1.DataSource
End Get
End Property

Sub Button_Clicked (sender As Object, e As EventArgs)
Server.Transfer("ReceivingPage.aspx")
End Sub

Sub Page_Load(sender As Object, e As EventArgs)
'bind some relevant data to the grid at page load
GetData()
End Sub

Sub GetData()
Dim DS As System.Data.DataSet
Dim Con As System.Data.SqlClient.SqlConnection
Dim Ada As System.Data.SqlClient.SqlDataAdapter
Dim connStr as String
conStr = "server=localhost;uid=sa;pwd=;initial catalog=pubs"

Con = New System.Data.SqlClient.SqlConnection(connStr)

Ada = New System.Data.SqlClient.SqlDataAdapter(_
"select * from authors", Con)

DS = New System.Data.DataSet()
Ada.Fill(DS, "Table1")

'Fill the DataGrid
DataGrid1.DataSource = DS.Tables("Table1").DefaultView
DataGrid1.DataBind()
End Sub
</script-x>

<html>
<body>
<form runat="server">
<b>Visiting SendingPage.aspx</b>
<asp:datagrid id=DataGrid1 runat=server />

<asp:Button id="myButton" OnClick="Button_Clicked"
Text="Send Grid Data" runat=server />
</form>
</body>
</html>




잠시 코드를 보도록 하자. 서버사이드 스크립트 방식을 사용하기 위해서는 먼저 클래스 이름을 선언해야 한다.

<%@ Page Language="VB" ClassName="SendingPage" %>



그 다음으로 다른 페이지로 넘어갈 각 속성을 get을 사용하여 지정한다.

Public ReadOnly Property GridData() As System.Object
Get
' Datasource of Datagrid1 is a data table inside a dataset
Return DataGrid1.DataSource
End Get
End Property



SendingPage.aspx에서 ReceivingPage.aspx로 데이터를 보내기 위해서 사용자가 submit 버튼을 눌러야 한다. 이에 해당하는 button_clicked 이벤트 핸들러가 발동하면 Server.Transfer를 거쳐서 ReceivingPage.aspx로 데이터그리드 컨트롤이 보내지게 된다.

Sub Button_Clicked(sender As Object, e As EventArgs)
Server.Transfer("ReceivingPage.aspx")
End Sub



이번장에서 우리는 서버사이드 스크립트 방식을 사용하는 SendingPage.aspx의 코드와 구조에 대해서 보았다. 다음에는 요청을 받는 ReceivingPage.aspx에 대해서 보겠다.



제공 : 코리아인터넷닷컴, a 2002년 05월 30일


웹폼의 데이터그리드로 데이터 전송(2) (2) : 데이터 받기  


저번장에서 우리는 ASP.NET 웹페이지에서 어떻게 데이터를 보내는지 살펴보았다. 이번에는 ASP.NET에서 데이터를 받기 위해서 어떻게해야 하는지 알아보자.

데이터 받기

데이터를 받는 ReceivingPage.aspx는 사용자가 SendingPage.aspx에서 submit 버튼을 누르고 난후 실행된다. 여기서 데이터가 넘어올 페이지에 대해서 명시할 필요가 있다. 이는 ReceivingPage.aspx의 상단에 @Reference 디렉티브를 명시함으로 해결된다. @Reference 디렉티브는 @Page 디렉티브 아래에 기술하며 어떤곳에서 데이터가 넘어오는지를 알려준다.

<%@ Page Language="VB" %>
<%@ Reference Page="SendingPage.aspx" %>



이렇게함으로 ReceivingPage.aspx는 SendingPage.aspx로 부터 넘어오는 정보를 읽어낼 수 있다. 이 작업을 완수하기 위해서 우선 Context 개체의 핸들러 속성으로부터 HTTP Request 인스턴스를 받아야한다. 이 핸들러는 페이지가 요청되었다는 것을 알려준다. 우리가 SendingPage.aspx 핸들러를 취했을때 필요한 데이터를 잡아낼 수 있다.

Context 개체로부터 핸들러를 얻고 그것을 SendingPage 클래스의 인스턴스로 변환한다. 이 클래스는 SendingPage.aspx의 @Page 디렉티브에 표시되있다. 그리고 SendingPage 타입의 전역변수를 선언하고 Page_Load 이벤트 핸들러에서 이 전역변수에 Context의 핸들러를 저장한다.

<script-x runat="server">
Dim objSendingPage As SendingPage

Sub page_Load()
    If Not IsPostBack Then
       objSendingPage = CType(Context.Handler, SendingPage)
    End If
End Sub

...



페이지가 로드된후 objSendingPage 변수는 SendingPage.aspx의 정보를 담고있는 클래스의 인스턴스를 가지게 된다. 우리는 데이터그리드의 DataSource 속성에 접근하기 위해 이 변수를 사용하면 된다. ReceivingPage.aspx에서 데이터그리드를 하나 만들것인데 이름을 receivingDG라고 하자. 다음의 코드처럼하면 SendingPage의 데이터그리드의 값으로 receivingDG를 생성할 수 있다.

receivingDG.DataSource = objSendingPage.GridData
receivingDG.DataBind()



다음은 ReceivingPage.aspx의 전체 코드이다.

<%@ Page Language="VB" %>
<%@ Reference Page="SendingPage.aspx" %>
<script-x runat="server">

Dim objSendingPage As SendingPage

Sub Page_Load()
    If Not IsPostBack Then
       objSendingPage = CType(context.Handler, SendingPage)
    End If

    receivingDG.DataSource = objSendingPage.GridData
    receivingDG.DataBind()
End Sub
</script-x>

<html>
<body>
    <form id="Form1" method="post" runat="server">
       <b>데이터받기</b>
       <asp:DataGrid id="receivingDG" runat="server" />
    </form>
</body>
</html>



코드비하인드

앞에서 우리는 페이지의 상단에 @Reference라는 디렉티브를 선언하였다. 코드비하인드에서 이 디렉티브는 해도되고 안해도된다. 그리고 서버사이드 스크립트와 똑같이 핸들러를 구하면 된다. 다음은 코드비하인드에서의 코드이다.


public objSendingPage As sendingPage

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If Not IsPostBack Then
       objSendingPage = CType(context.Handler, SendingPage)
    End If

    receivingDG.DataSource = objSendingPage.GridData
    receivingDG.DataBind()

End Sub




여기서는 데이터그리드의 데이터를 이동하는 것을 다루었지만 다른 서버 컨트롤들도 각각의 데이터들에 대한 속성을 가지고 데이터 이동이 가능하다.

'Web(웹) Study > ASP .NET' 카테고리의 다른 글

ASP 기본 다지기  (0) 2008.07.31
웹서버 컨트롤  (0) 2008.07.15
VBScript개요와 기본적인 사용법  (0) 2008.07.15
XML 파일 읽기  (0) 2008.07.15
Global.asa 파일의 구성  (0) 2008.07.15

+ Recent posts