C#으로 이해하는 자료구조 전자책
C# 초보 캠프

Day 9

데이타 바인딩을 사용하여 데이타 출력하기

데이타를 DataGridView 컨트롤에 넣기 위한 방법은 크게 Unbound 모드와 Data Binding 모드가 있는데, 여기서는 데이타 바인딩을 사용하여 데이타를 그리드에 뿌려 주는 방법을 알아본다. 데이타 바인딩이란 그리드에 넣을 데이타가 미리 컬렉션이나 테이블 형태로 존재하였을 때, 이러한 컬렉션이나 테이블 데이타를 DataGridView 컨트롤에 일괄적으로 넘겨주면, DataGridView 컨트롤이 알아서 데이타를 그리드에 뿌려주는 일을 하게 된다. 일반으로 데이타베이스에 데이타를 가져올 때는 테이블 형태로 가져오므로 쉽게 DataGridView 컨트롤에 바인딩할 수 있다. 이전 장에서 사용한 텍스트 파일에 데이타가 있는 경우는 개발자가 이를 컬렉션이나 테이블(DataTable) 형태로 미리 만들 후, DataGridView 컨트롤에 바인딩하게 된다. 여기서는 컬렉션 형태로 만들기 위해 하나의 Row 데이타를 담는 클래스(class)를 정의하고, 이 클래스의 객체들을 담는 List 컬렉션을 만든다. 컬렉션은 하나 이상의 데이타를 담는 컨테이너라 볼 수 있는데, 이전에 배운 배열도 일종의 컬렉션으로 볼 수 있다. 배열은 처음 생성시 그 크기가 고정되어 있어 나중에 배열의 크기를 변동시킬 수 없는 단점이 있는데, List 컬렉션은 이러한 단점을 보완한 것으로 배열요소가 계속 증가하면 자동으로 배열의 크기가 증가되는 배열 (이를 동적배열 혹은 Dynamic Array라 한다) 이다.
(주: class는 데이타를 갖는 필드(혹은 속성)와 행위를 나타내는 메서드로 구성되어 있다. 각 컬럼이 하나의 속성 혹은 필드에 대응된다고 보면된다. 클래스가 정의된 후 "new 클래스명()" 과 같이 하여 객체(object)를 생성한다. 하나의 클래스로부터 여러 개의 객체를 계속 만들 수 있다. 이 부분에 대해서는 Day 10에 좀 더 자세히 설명한다)

실습

데이타 바인딩을 사용하기 위해서 List<Donation> 컬렉션을 만들고, 이를 DataGridView.DataSource 속성에 지정한다. List<Donation> 컬렉션는 복수 개의 Donation 을 담게 되는데, 여기서 Donation 클래스는 간단하게 각 컬럼명에 상응하는 속성을 정의하면 된다. 텍스트 파일에서 한 라인씩 읽어 들어 이를 컬럼으로 Split하고, 이 컬럼들을 Donation 객체의 속성들에 하나씩 지정한다. 하나의 Donation 객체가 설정되면 이를 리스트 컬렉션에 추가하면 된다.

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Windows.Forms;

    namespace Day10
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void btnLoad_Click(object sender, EventArgs e)
            {
                // 컬렉션 리스트를 만든다
                List<Donation> donationList = new List<Donation>();

                // StreamReader로 데이타를 읽는다
                StreamReader rd = new StreamReader("data.txt");

                while (!rd.EndOfStream)
                {
                    string line = rd.ReadLine();
                    string[] cols = line.Split(',');

                    // 컬럼들로 Donation 객체를 만든다
                    Donation d = new Donation();
                    d.Id = cols[0];
                    d.Name = cols[1];
                    d.Grade = cols[2];
                    d.Date = DateTime.Parse(cols[3]);
                    d.Amount = double.Parse(cols[4].Substring(1));

                    // Donation 리스트에 Donation 객체를 추가한다
                    donationList.Add(d);
                }

                // StreamReader를 닫는다
                rd.Close();

                // DataGridView의 DataSource 속성에 Donation 리스트 (컬렉션)을 지정하여
                // 데이타 바인딩을 수행한다
                dataGridView1.DataSource = donationList;
            }

        }

        // Donation 클래스
        // 각 컬럼이 하나의 속성에 대응된다
        class Donation
        {
            public string Id { get; set; }   // Id 라는 속성
            public string Name { get; set; }  // Name 이라는 속성
            public string Grade { get; set; }
            public DateTime Date { get; set; }
            public double Amount { get; set; }
        }
    }
  • 하단에 Donation 클래스를 정의하였는데, 여기서는 메서드 없이 속성만으로 클래스를 정의하였다
  • Donation 클래스를 갖는 리스트 컬렉션을 만들기 위해서는 new List<Donation>() 같이 사용한다
  • Donation 클래스로부터 객체를 생성한 후, 그 객체의 속성들에 상응하는 컬럼들을 넣어 준다
  • Donation 리스트에 Donation 객체를 추가하기 위해서는 donationList.Add() 처럼 Add 메서드를 사용한다
  • DataGridView 컨트롤에 컬렉션을 데이타 바인딩하기 위해서는 DataSource 속성에 컬렉션을 지정하면 된다


본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.