Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

윈폼개발

닷넷을 기반으로 한 윈도우 응용프로그램 개발 지식을 다룹니다. 비지니스 응용프로그램을 위한 닷넷 윈폼 응용프로그램은 아주 강력합니다

[컨트롤, 바인딩] BindingNavigator

작성자 : 박종명
최초 작성일 : 2008-06-26 (목요일)
최종 수정일 : 2008-06-26 (목요일)
조회 수 : 5436

이번 포스트에서는 윈폼 컨트롤 중 컨트롤의 바인딩과 관련된 BindingNavigator  컨트롤에 대해 알아 봅니다.

 

BindingNavigator 컨트롤

 

네임스페이스: System.Windows.Forms
어셈블리: System.Windows.Forms(system.windows.forms.dll)

 

다음은 이 컨트롤의 상속 계층 구조 입니다

 

BindingNavigator 컨트롤은 닷넷 2.0 에 새롭게 추가된 컨트롤로써 바인딩된 컨트롤에 대한 탐색 및 추가,제거와 같은

조작을 가능케 하는 UI 와 기능을 미리 구현해 놓은 컨트롤입니다.

 

 

= 바인딩 된 컨트롤 =

일단 바인딩된 컨트롤이 무엇인지 알아 보겠습니다.

닷넷 프레임워크에서는 윈폼 컨트롤에 특정 객체를 바인딩 할 수 있도록 제공하는데,

예를 들어 TextBox 컨트롤에 DataSet 의 특정 컬럼의 값을 표시하도록 바인딩 할 수 있으며

또한 다른 객체의 프로퍼티의 값을 표시하도록 바인딩 할 수 있습니다.

, Customer 객체가 공용 프로프터인 Name 를 가지고 있다면 이를 텍스트 박스에 표시하기 위해

일반적으로 다음처럼 이용합니다.

textBox1.Text = Customer.Name

 

그러나 컨트롤의 데이터 바인딩을 이용하면 다음과 같이 표시할 수도 있습니다.

textBox1.DataBindings.Add("Text",Customer,"Name");

 

이렇게 바인딩을 사용하면 여러 장점이 있습니다.

자세한 장점은 [Effective C#] 책의 '#38 데이터 바인딩을 사용하라' 섹션에서 상세하게 나와 있습니다.

 

DataTable 를 컨트롤의 바인딩 소스로 사용한다면 '탐색'이 용이합니다.

특정 컬럼과 연결된 텍스트 박스는 DataTable 의 내용들을 쉽게 이동할 수 있습니다.

 

 

= 수동으로 탐색하기 =

데이터 소스의 내용을 텍스트박스로 바인딩하여 탐색하는 방법을 알아 보도록 하겠습니다.

BindingNavigator 컨트롤을 사용하지 않고 직접 코드를 작성해 보도록 합니다.

(닷넷 2.0 BindingNavigator 컨트롤이 새로 추가되기 이전에는 이러한 형태로 탐색을 했습니다)

 

다음과 같은 UI 를 만들어서 데이터를 그리드와 텍스트박스에 바인딩하도록 하겠습니다.

 

다음은 위 UI에 대한 코드입니다.

폼이 로드될 때 소스로 사용될 DataTable 을 만들고 DataGridView TextBox 에 바인딩하는 코드입니다.

이렇게 텍스트 박스에 바인딩 하면 샘플처럼 데이터 소스인 DataTable 의 내용들을 탐색할 수 있게 됩니다.

또한 DataGridView 에서 행을 이동하면 텍스트 박스도 동일하게 이동된 행의 내용을 표시하게 됩니다.

DataGridView TextBox 들이 서로 동기화가 이루어 지는 것입니다.

        //DataTable 클래스 변수 선언
        DataTable dt;

 

        private void Form2_Load(object sender, EventArgs e)
        {
            //DataTable 에 데이터를 삽입한다
            dt = new DataTable();
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Age", typeof(int));
            dt.Columns.Add("Habit", typeof(string));

            dt.Rows.Add("홍길동", 30, "독서");
            dt.Rows.Add("강감찬", 35, "영화감상");
            dt.Rows.Add("이순신", 40, "보드");

 

            //DataGridView 컨트롤에 DataTable 를 바인딩 한다.
            this.dataGridView1.DataSource = dt;

 

            // TextBox DataTable 의 각 컬럼들을 바인딩 한다.
            this.txtName.DataBindings.Add("Text", dt, "Name");
            this.txtAge.DataBindings.Add("Text", dt, "Age");
            this.txtHabit.DataBindings.Add("Text", dt, "Habit");           
        }
     
        //다음 버턴
        private void txtNext_Click(object sender, EventArgs e)
        {
            this.BindingContext[dt].Position++;
        }

        //이전 버턴
        private void btnPrev_Click(object sender, EventArgs e)
        {
            this.BindingContext[dt].Position++;
        }

        //끝으로 버턴
        private void btnEnd_Click(object sender, EventArgs e)
        {
            this.BindingContext[dt].Position = dt.Rows.Count;
        }

        //처음으로 버턴
        private void btnStart_Click(object sender, EventArgs e)
        {
            this.BindingContext[dt].Position = 0;
        }

 

 

= BindingNavigator 컨트롤을 이용하여 탐색하기 =

이제 닷넷 2.0 에 새롭게 추가된 BindingNavigator 컨트롤을 이용하여 탐색하는 샘플을 살펴 보겠습니다.

앞서 샘플에서는 '이전','다음','처음으로','끝으로' 와 같은 데이터 탐색을 직접 작성했어야 했지만

BindingNavigator 컨트롤을 사용하면 자동으로 이와 같은 일을 처리해 줍니다.

 

도구상자에서 다음처럼 BindingNavigator 컨트롤을 폼에 올립니다.

 

BindingNavigator 컨트롤을 폼에 올리면 폼의 상단에 탐색기능을 위한 깔끔한 UI 가 나타납니다.

이는 마치 ToolStrip 컨트롤을 폼에 올린 모습과 유사합니다.

 

그렇습니다. BindingNavigator 컨트롤은 ToolStrip 컨트롤을 상속받는 컨트롤임을 직관적으로 알 수 있습니다.

 

이렇게 올리기면 하고 폼을 바로 실행하면 다음 그림처럼 컨트롤이 비활성화 된 모습으로 실행됩니다.

이것은 아직 BindingNavigator 컨트롤에 바인딩소스가 지정되지 않았기 때문입니다.

 

이제 앞서 예제에서 만든 데이터 소스를 바인딩 해 보도록 하겠습니다.

 

BindingNavigator 클래스는 BindingSource 라는 속성을 제공하는데 이 속성은 System.Windows.Forms.BindingSource

객체를 의미합니다. 따라서 다음 그림처럼 폼에 BindingSource 컴포넌트를 올리도록 합니다

 

그리고 다음처럼 코드를 작성합니다.

        private DataTable dt;
        private void Form1_Load(object sender, EventArgs e)
        {          
            dt = new DataTable();
            dt.Columns.Add("Name",typeof(string));
            dt.Columns.Add("Age",typeof(int));
            dt.Columns.Add("Habit", typeof(string));           

            dt.Rows.Add("홍길동", 30, "독서");
            dt.Rows.Add("
강감찬", 35, "영화감상");
            dt.Rows.Add("
이순신", 40, "보드");

 

            //DataGridView 컨트롤에 DataTable 를 바인딩 한다.
            this.dataGridView1.DataSource = dt;

 

            //BindingSource DataSource 로 위에서 만든 DataTable 를 지정한다
          this.bindingSource1.DataSource = dt;


           
//BindingNavigator 컨트롤에 BindingSource 를 지정한다
          this.bindingNavigator1.BindingSource = this.bindingSource1;

 

            // TextBox DataTable 의 각 컬럼들을 바인딩 한다.
            this.txtName.DataBindings.Add("Text",this.bindingSource1,"Name");
            this.txtAge.DataBindings.Add("Text", this.bindingSource1, "Age");
            this.txtHabit.DataBindings.Add("Text", this.bindingSource1, "Habit");                      
        }

 

이제 더 이상 탐색을 위한 코드를 개발자가 직접 작성하지 않아도 됩니다.

'이전,다음,앞으로,끝으로' 와 같은 탐색기능을 BindingNavigator 컨트롤이 알아서 해 주기 때문입니다.

또한 탐색 뿐만 아니라 데이터의 추가,제거 등도 가능합니다.

BindingNavigator 컨트롤의  버턴을 통해 데이터 원본에 데이터를 추가하거나 제거할 수 있습니다.

즉 이 버턴을 통해 추가,제거를 하면 데이터 원본인 DataTable 에도 해당 행이 추가되거나 제거된다는 것입니다.

 

아래는 실행 화면 입니다.

 

이로써 간단히 BindingNavigator 컨트롤에 대해 알아 보았습니다.

이것을 사용하면 바인딩된 컨트롤의 탐색 및 제어를 직접 개발하지 않아도 된다는 장점이 있습니다.

 

물론 BindingNavigator 컨트롤도 ToolStrip 컨트롤 처럼 개발자가 직접 ToolStriptButton 과 같은 추가적인 메뉴를

추가 구성할 수 있습니다.

 

(첨부파일에 이 아티틀에 사용된 샘플프로젝트를 등록하였습니다. 참고하세요~)

 

 

 

이름
비밀번호
홈페이지
MM <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요