[C# 윈폼] 윈폼 CSV 파일 읽어서 DataGridView에 값 넣기

안녕하세요.

 

오늘은 C# 윈폼에서 CSV 파일을 읽어서 해당 내용을 DataGridView 컨트롤에 넣는 방법에 대해서 알려 드리려고 합니다.

 

종종 실무에서 CSV 파일을 읽고 해당 데이터를 여러 방면으로 다루는 경우가 있는데요.

 

이럴 때 유용하게 사용할 수 있는 내용으로써, 오늘은 CSV 파일을 읽고 해당 내용을 DataGridView에 보여주는 법에 대해서 보여드리도록 하겠습니다.

 

또한, 다음 포스팅에서는 DB 연동까지 해서 CSV 내용을 DBInsert 해서 저장하는 방법까지 보여 드리도록 하겠습니다.

 

그럼 예제 프로그램을 통해서 보여 드리도록 하겠습니다.

 

먼저 빈 윈폼 프로젝트 하나를 생성해 주시고 아래와 같이 DataGridView컨트롤과 Button 컨트롤 하나를 배치해 주시기 바랍니다.

 

빈 윈폼 프로젝트 생성 및 컨트롤 배치

이제 여기서 “CSV Read” 버튼을 클릭하면 CSV 파일을 읽어와서 해당 CSV 파일 내용이 DataGridView컨트롤에 보여지도록 예제 코드를 작성해 보도록 하겠습니다.

 

예제 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace CSVTest
{
    public partial class Form1 : Form
    {
        public enum COLUMNS { NAME, AGE, GRADE, PHONENUMBER }
 
        List<string> csvList = null;
        List<STUDENT> stuList = new List<STUDENT>();
 
        public Form1()
        {
            InitializeComponent();
 
            //CSV read Button Click Event
            uiBtn_ReadCsv.Click += uiBtn_ReadCsv_Click; 
        }
 
        /// <summary>
        /// CSV Read Button Click Event Handler
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void uiBtn_ReadCsv_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
 
            if (fbd.ShowDialog() == DialogResult.OK)
 
            {
                string[] fileName = Directory.GetFiles(fbd.SelectedPath); //폴더 읽어와
 
                csvList = fileName.Where(x => x.IndexOf(".csv",StringComparison.OrdinalIgnoreCase) >= 0)
                               .Select(x => x).ToList();
 
                try
                {
                    GetCSVData(csvList); //CSV 파일 내용 읽어오기
                    DataSouceGridView(); //DataGridView 에 CSV 내용 바인딩
                }
                catch { }
            }
        }
 
        /// <summary>
        /// CSV 파일 읽는 메서드
        /// </summary>
        /// <param name="csvList"></param>
        private void GetCSVData(List<string> csvList)
        {
            for (int idx = 0; idx < csvList.Count; idx++)
            {
                using (var sr = new System.IO.StreamReader(csvList[idx], Encoding.Default, true))
                {
                    while (!sr.EndOfStream)
                    {
                        string array = sr.ReadLine();
                        string[] values = array.Split(',');
 
                        //컬럼명은 건너뛰기
                        if (array.Contains("NAME"))
                            continue;
 
                        STUDENT stu = new STUDENT();
                        stuList.Add(SetData(stu, values));
                    }
                }
            }
        }
 
        /// <summary>
        /// Student 객체에 데이터 저장
        /// </summary>
        /// <param name="stu"></param>
        /// <param name="values"></param>
        /// <returns></returns>
        private STUDENT SetData(STUDENT stu, string[] values)
        {
            stu.NAME = values[(int)COLUMNS.NAME].ToString();
            stu.AGE = values[(int)COLUMNS.AGE].ToString();
            stu.GRADE = values[(int)COLUMNS.GRADE].ToString();
            stu.PHONENUMBER = values[(int)COLUMNS.PHONENUMBER].ToString();
 
            return stu;
        }
 
        /// <summary>
        /// DataGridView 컨트롤에 데이터 바인딩
        /// </summary>
        private void DataSouceGridView()
        {
            // 값들이 입력된 테이블을 DataGridView에 입력합니다.
            uiGridView_CSV.DataSource = GetDataTable();
        }
 
        /// <summary>
        /// DataTable 생성
        /// </summary>
        /// <returns></returns>
        private DataTable GetDataTable()
        {
            DataTable dt = new DataTable();
 
            //컬럼 추가
            CreateColumn(dt);
 
            //Row 추가
            CreateRow(dt);
 
            return dt;
        }
 
        /// <summary>
        /// 컬럼 생성
        /// </summary>
        /// <param name="dt"></param>
        private void CreateColumn(DataTable dt)
        {
            dt.Columns.Add("Name");
            dt.Columns.Add("Age");
            dt.Columns.Add("Grade");
            dt.Columns.Add("PHONENUMBER");
        }
 
        /// <summary>
        /// Row데이터 넣기
        /// </summary>
        /// <param name="dt"></param>
        private void CreateRow(DataTable dt)
        {
            for(int idx = 0; idx < stuList.Count; idx++)
            {
                dt.Rows.Add(new string[] { stuList[idx].NAME,
                                           stuList[idx].AGE,
                                           stuList[idx].GRADE,
                                           stuList[idx].PHONENUMBER });
            }
        }
    }
 
    public class STUDENT
    {
        public string NAME { get; set; }
        public string AGE { get; set; }
        public string GRADE { get; set; }
        public string PHONENUMBER { get; set; }
    }
}
 
cs

 

실행 결과

프로그램 실행을 하게 되면 위와 같이 나오는데, 여기서 CSV Read 버튼을 클릭하게 되면 아래 CSV 파일 들어있는 폴더를 선택할 수 있는 폴더 브라우저가 나오게 됩니다.

 

여기서 저는 새 폴더Student.csv 파일 하나를 넣어 놨습니다.

위의 Student 파일 내용은 아래와 같습니다.

 

이제 이 내용을 읽어서 그대로 DataGridView 컨트롤에 바인딩 된 것을 아래와 같이 확인하실 수 있습니다.

 

 

이렇게 CSV 파일을 제대로 읽고 해당 내용을 DataGridView 컨트롤에 바인딩 하는 방법에 대해서 알아 보았습니다.

 

다음 포스팅에서는 여기서 추가로 위의 내용을 DBInsert 해서 저장하는 방법까지 보여 드리도록 하겠습니다.

 

감사합니다.^^

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY