본문 바로가기

Programming/.NET

[ASP.NET] ObjectDataSource

ObjectDataSource 는 개발자에 의해 직접 코드로 작성되거나 O/R(Object Relational) Mapper와 같은 것에 의해 생성된 미들 레이어 비지니스 객체(Middle-Layer Business Object)를 직접적으로 바인딩할 수 있도록 하는 기능을 제공합니다.

ObjectDataSource 사용방법을 알아보기 위해 우선 바인딩 대상이 될 test_products 라는 샘플 클래스와 test_products 클래스 컬렉션에 대해 select, insert, update, delete 등을 수행하는 test_products_op 클래스를 생성하도록 하겠습니다.
public class test_products
{
    public string product_name
    {
        get;
        set;
    }

    public string product_code
    {
        get;
        set;
    }

    public string product_desc
    {
        get;
        set;
    }
}

public class test_products_op
{
    public List<test_products> Select(string code)
    {
        List<test_products> tp = new List<test_products>();
        tp.Add(new test_products() { product_name = "자동차", product_code = "CAR", product_desc = "도로 주행용" });
        tp.Add(new test_products() { product_name = "비행기", product_code = "AIR", product_desc = "공중 묘기용" });
        tp.Add(new test_products() { product_name = "자전거", product_code = "CYC", product_desc = "산책" });

        return tp;
    }

    public void Insert(test_products tp)
    {
    }

    public void Update(test_products tp)
    {
    }

    public void Delete(test_products tp)
    {
    }
}
▶<코드 1-1>

위에서 '미들 레이어 비지니스 객체(Middle-Layer Business Object)'라는 용어를 언급하였는데 이건 어려울것 없이 그냥 위에서 처럼 작성된 임의의 클래스와 해당 클래스의 객체 컬렉션을 조작하는 클래스라고 보시면 됩니다. test_products_op 클래스에는 Insert, Update, Delete 가 비었는데 Select 부분을 포함하여 내부 코드는 정해진 것이 없으므로 개발자 임의로 작성해 넣도록 합니다.

Visual Studio 의 디자인 영역에 ObjectDataSource 컨트롤을 배치하고 스마트 태그를 통해 설정마법사를 호출합니다. 설정 마법사 화면이 열리면 'Choose your business object' 부분에서 <코드 1-1>에 있는 test_products_op 항목을 선택하고 'Next' 버튼을 누릅니다.

▶ <그림 1-1>

이 후 설정화면에서는 Select, Update, Insert, Delete 에 대해 어떤 메소드를 호출할지 지정하는데 여기에서는 <코드 1-1>에 있는 test_products_op 클래스의 각 메소드와 일치하는 항목을 선택하면 됩니다. 예제에서는 Update, Insert, Delete 부분의 메소드를 지정해도 되지만 아무런 코드도 넣지 않았으므로 기능상 수행되는건 없습니다.

<그림 1-1>에서 Next 버튼을 누르면 Select 메소드에 대해 특정 Parameter 를 추가할 수 있는 설정화면이 나타날 것입니다. 필요하다면 다른 데이터 소스 컨트롤 처럼 ControlParameter 나 QueryStringParamter 와 같은 원하는 형식의 Parameter 추가도 가능합니다.

▶ <그림 1-2>

지금까지의 설정을 모두 완료하고 나면 설정 마법사에 의해 다음과 같은 코드가 완성되고
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select" TypeName="Webtest.App_Code.test_products_op">
    <SelectParameters>
        <asp:Parameter Name="code" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>
▶ <코드 1-2>

원하는 데이터 컨트롤에 바인딩하도록 합니다.
<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1"></asp:GridView>
▶ <코드 1-3>

그 밖에 ObjectDataSource 컨트롤에서는 특정 동작의 이전과 이후에 발생시킬 수 있는 여러 이벤트들을 포함하고 있습니다. 예를 들어 OnSelected 의 경우에는 데이터 컬렉션에 대한 Select 메소드 수행 후 발생되는 이벤트를 의미하며 다음과 같이 사용될 수 있습니다.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select" TypeName="Webtest.App_Code.test_products_op" OnSelected="ObjectDataSource1_Selected">
    <SelectParameters>
        <asp:Parameter Name="code" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>
▶ <코드 1-4>
protected void ObjectDataSource1_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
    Response.Write("데이터 출력됨");
}