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

Day 8

텍스트 파일에서 데이타 읽어 그리드에 출력

텍스트 파일에 저장된 데이타를 읽어들여 이를 윈폼의 대표적인 그리드 컨트롤인 DataGridView 라는 컨트롤에 출력해 보는 작업에 해본다. 데이타를 DataGridView 컨트롤에 넣기 위한 방법은 크게 Unbound 모드와 Data Binding 모드가 있는데, 일단 Unbound 모드로 넣어 본다. Unbound 모드란 데이타 바인딩을 사용하지 않는 것으로 개발자가 한 Row 씩, 한 컬럼마다 데이타를 넣어 주는 것이다. DataGridView에서 하나의 Row는 여러 개 의 컬럼으로 되어 있는데, 하나의 Row가 몇 개의 컬럼으로 되어 있는지는 Unbound 모드인 경우에는 미리 정의해 주어야 한다. (컬럼 정의는 아래 예제의 Form1_Load 에서와 같이 Columns 컬렉션에 컬럼명과 헤더명을 추가하면 된다)

실습

텍스트 파일은 Day 7 에서 만들 CSV 포맷의 데이타 파일을 사용한다. 데이타 파일은 StreamReader() 통해 한 라인씩 읽어 들여 처리하면 된다. 복수의 라인을 읽어 들이기 때문에, 마지막을 체크하기 위해 StreamReader의 EndOfStream 속성을 체크하면 된다. 각 필드가 콤마로 분리되어 있으므로, 이를 string.Split() 메서드를 사용하여 컬럼별로 분리해서 DataGridView.Rows 컬렉션에 한 Row씩 추가 한다. DataGridView.Rows.Add()의 파라미터에는 각 컬럼의 값을 순서대로 넣어 주면 된다.

다음은 아래 코드와 연관된 데이타 출력화면이다.

    using System;
    using System.IO;
    using System.Windows.Forms;

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

            private void Form1_Load(object sender, EventArgs e)
            {
                // 컬럼명과 컬럼헤더를 사용해 컬럼을 정의한다
                dataGridView1.Columns.Add("ID", "Id");
                dataGridView1.Columns.Add("Name", "이름");
                dataGridView1.Columns.Add("Grade", "학년");
                dataGridView1.Columns.Add("Date", "날짜");
                dataGridView1.Columns.Add("Amount", "금액");
            }

            private void btnLoad_Click(object sender, EventArgs e)
            {
                // 데이타를 읽는 StreamReader
                StreamReader rd = new StreamReader("data.txt");

                // 마지막이 될 때까지 루프
                while (!rd.EndOfStream)
                {
                    // 한 라인을 읽는다
                    string line = rd.ReadLine();

                    // 라인을 콤마로 분리하여 컬럼을 만든다
                    string[] cols = line.Split(',');

                    // 한 라인에 각 컬럼의 데이타를 순서대로 넣는다
                    dataGridView1.Rows.Add(cols[0], cols[1], cols[2], cols[3], cols[4]);
                }

                // StreamReader는 사용 후 반드시 닫는다
                rd.Close();
            }

        }
    }
  • Form1_Load()에는 컬럼들을 정의했는데, Unbound 모드에서 컬럼들은 데이타 추가 전에 정의해 주어야 한다
  • 텍스트 파일에서 데이타를 읽기 위해 StreamReader 클래스를 사용한다. 여기서 StreamReader의 데이타 파일은 data.txt 로 실행되는 프로그램 디렉토리에 있으면 된다.
  • 한 라인을 읽을 때는, 이 클래스의 ReadLine() 메서드를 사용한다. StreamReader 를 사용한 후에는 반드시 Close()를 호출해서 닫아 주어야 한다.
  • 데이타 파일의 마지막을 체크하기 위해서는 EndOfStream 속성을 참인지 체크하면 된다
  • 콤마로 문자열되어 있는 문자열을 분리하기 위해서 Split() 메서드를 사용하였다
  • DataGridView 컨트롤에 새로운 Row를 추가하기 위해서는 Rows.Add(컬럼1, 컬럼2, ...) 와 같이 컬럼은 순서대로 추가하면 된다


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