소년포비의 세계정복!!

바인딩 가능한 객체 만들기 본문

프로그램 세상/C#

바인딩 가능한 객체 만들기

소년포비 2009. 10. 6. 06:10

 

ASP.NET 1.1 DataGird ASP.NET 2.0 GridView 는 데이터 집합을 Grid 형태로

표현해 주는 유용한 컨트롤이다.

 

일반적으로 이 컨트롤을 사용할 때에는 데이터베이스로부터 결과 집합 셋을 얻어 와서

DataSet 과 같은 데이터 집합 객체를 바인딩 시킨다.

 

GridView1.DataSource = DataSet1;

 

이것이 가능한 이유는 GridView DataSource 로 받아들이는 객체의 규약된 인터페이스가 있기 때문에 가능한 것이다.

 

먼저 DataSet 의 시그너처를 살펴 보자

 

[SerializableAttribute]

public class DataSet : MarshalByValueComponent, IListSource, IXmlSerializable, ISupportInitializeNotification,

        ISupportInitialize, ISerializable

 

 

DataSet 는 여러 개의 인터페이스를 구현하고 있는데 이 중 IListSource 인터페이스의

구현이 바로 앞서 말한 규약된 인터페이스가 되는 것이다.

GridView 는 객체가 IListSource 을 구현하고 있다면 바인딩 가능하도록 설계된 것이다.

 

그러나 IListSource 만이 유일한 규약은 아니다

우리가 잘 알고 있는 복합 객체 기법 IEnumerable 인터페이스도 DataSource 로 사용할 수 있다.

뿐만 아니라 IDataSource 도 가능하다.

 

결론적으로 GridView 에 데이터를 바인딩 하기 위한 데이터 소스는

IListSource’ IEnumerable’ 혹은 IDataSource’ 형식 중 하나이기만 하면 된다는 것이다.

 

 

그럼 실제로 우리가 만든 객체를 GridView 컨트롤에 바인딩 시키는 데모를 만들어 보자

우리의 Demo 에서는 전형적인 Iterator 패턴이 적용된 복합객체를 사용할 것이다.

(샘플은 닷넷 2.0 으로 작성되었다)

 

먼저 복합객체의 요소에 해당하는 이라는 클래스를 정의한다.

 

public class Book{

    private string title;

    private int price;

    private string author;

    public Book(string title, int price, string author){

        this.title = title;

        this.price = price;

        this.author = author;

    }   

    public string Title{

        get{return this.title; }

    }

    public int Price{

        get{return this.price; }

    }

    public string Author{

        get{return this.author; }

    }

}

 

 

다음으로는 복합객체인 책장클래스를 정의한다.

이 클래스는 IEnumerable 를 구현하는 클래스가 된다

public class BookShelf : System.Collections.IEnumerable

{

    public Book[] books;

    public int index = 0;

    public BookShelf(int size)

    {

        this.books = new Book[size];

    }

    public void Add(Book book)

    {

        this.books[this.index] = book;

        index++;

    }

 

    public System.Collections.IEnumerator GetEnumerator()

    {

        foreach (Book book in this.books)

        {

            yield return book;

        }

    }

}

 

 

이제 데이터 소스로 사용될 복합 객체가 준비되었다.

 

 

실제 GridView 로 바인딩 되는 모습을 보기 위해 웹 폼 페이지에 GridView 를 하나 올리고 아래처럼 기술한다.

 

BookShelf bookShelf = new BookShelf(10);

 

for (int i = 0; i < 10; i++)

{

     Book book =

new Book(

              String.Format("제목 : 재미있는 책 - {0}", i), i * 1000, "저자 : 길동"

);

     bookShelf.Add(book);

}

 

this.GridView1.DataSource = bookShelf;

this.GridView1.DataBind();

 

아래 그림은 위 코드를 실행한 결과 화면이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

결과에서 알 수 있듯이 복합객체의 각 요소들이 GridView 에 바인딩 되었다.

또한 각 요소의 공용 프로퍼티는 GridView 의 컬럼 제목으로 표현되고 그 값들이

해당 컬럼에 표현되는 것이다.

 

 

 

( Iterator 패턴에 대해 자세히 알고 싶으면 다음 기술문서를 참고하기 바랍니다.

  Iterator Generics )