티스토리 뷰

======================================================

안녕하세요 Doridori 입니다. 


이번 강의는 DataRow, DataTable, DataSet에 대한 강의 입니다. 


기본적으로 DataTable과 DataRow는 한묶음이라고 보시면 되고 DataSet의 경우 DataTable을 모아놓은 자료 구조라고 보시면 될것 같습니다. 


여기까지 열심히 진행 하셨으면 이제 어느정도 원하는 형태의 Data는 다룰수 있다고 생각 합니다. ^^

======================================================


자료구조 4 (DataRow, DataTable, DataSet)


Source UI) Study_23_DataTable_DataSet(UI).zip

Soruce 전체) Study_23_DataTable_DataSet.zip

교재) 23강 자료구조 4 (DataRow, DataTable, DataSet).pdf





이번강의는 DataRow, DataTable, DataSet에 대한 강의 입니다. 


이전 강의 들에서 대부분 List 형태의 Data를 다뤘다면 이번 강의에서는 Table 형태의 Data를 다루게 됩니다. 

List 형태의 Data에서 열(Colunm)이 추가 되었다고 보시면 될것 같습니다. 


물론 이 강좌의 경우 기본강좌로 정하고 진행하였기 때문에 자료구조 4강동안 진행 한 내용이 전부는 아니지만 말그대로 기본에 대한 내용은 거의 포함하고 있다고 생각하시면 될것 같습니다. 


다른 내용들은 기본에서 파생된 자료구조들이라고 생각 하셔도 됩니다. 


다른 설명보다 아래 이미지의 그림을 보시면 내용이 한눈에 들어올것 같습니다. 

(뭐 다른게 더 없습니다. ㅎㅎ)



이번 강좌의 예제는 학생정보를 기록해서 저장하는 부분과 확인 하는 부분 삭제하는 부분에 대한 프로그램을 준비 하였습니다. 

(항상 말씀드리지만 그림에 나오는 이름들이 익숙한건 오예~! 입니다.)


먼저 자료들을 저장할 DataSet을 전역변수로 만들고 반을 등록 할 때 사용할 Table을 작성 합니다. 


그리고 이 Table에 대해서 열(Column)을 지정하고 완성된 Table에 대해서 행을 등록 하기 위해 DataRow를 지정 합니다. 


등록 하는 시점에 등록 하는 내용을 DataRow에 넣고 만들어진 DataRow를 DataTable에 집어 넣습니다. 


완성된 DataTable을 DataSet에 추가 하면 완성입니다.~ ^^ 


만들어진 DataSet을 가지고 내용도 확인하고 안에 있는 내용을 삭제도 하는 예제 입니다. 



강의)


지난 주말에 아이가 아파서 입원 했습니다. ㅜㅠ


회사는 바빠서 아이 입원할때만 간신히 오전 부재를 할수 있었습니다. (멀어서 지하철타고 이동하면 3시간 정도 걸립니다. 차타면 1시간)


약간 정신 없는 느낌이지만 보고 같이 따라서 진행해 보시면 도움이 될 것 같습니다. 


(한 강좌 한강좌를 진행 할 수록 저도 열심히 했다 싶습니다. 처음부터 지금까지 따라와주신분은 많은것을 가져가셨을것이라고 생각 합니다.)

(이후 강좌를 마무리하고 전체 PPT를 모아서 올릴 예정인데 보시면 생각보다 많이 했다 라는 느낌을 받으실 수 있을것 같습니다. ^^)




 - 수정 추가 강의 동영상






Source)


중간에 소스에 주석을 잡아 놓은 부분은 이런식으로도 작성 할 수 있다고 참고로 잡아놓은 부분이니 무시하셔도 됩니다. 

(강의를 보시면 설명하면서 진행 하였습니다. ^^)



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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace DataTableTest
{
    public partial class Form1 : Form
    {
        DataSet ds = new DataSet();  // 반의 정보를 가지고 있을 DataSet
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// 등록 Button을 Click 했을 경우 반에 대한 DataTable을 만들고 DataTable을 DataSet에 등록
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnReg_Click(object sender, EventArgs e)
        {
            bool bCheckIsTalbe = false;
 
            // DataSet안에 해당하는 DataTable이 있는지 확인 한다
            if (ds.Tables.Contains(cboxRegClass.Text))
            {
                bCheckIsTalbe = true;
            }
 
            //foreach (DataTable oTable in ds.Tables)
            //{
            //    if (oTable.TableName.Contains(cboxRegClass.Text))
            //    {
            //        bCheckIsTalbe = true;
            //        break;
            //    }
            //}
 
            DataTable dt = null;
 
            if (!bCheckIsTalbe)  // 기존 Table이 없을 경우 신규로 생성
            {
                dt = new DataTable(cboxRegClass.Text);
 
                //DataColumn 생성
                DataColumn colName = new DataColumn("NAME"typeof(string));
                DataColumn colSex = new DataColumn("SEX"typeof(string));
                DataColumn colRef = new DataColumn("REF"typeof(string));
 
                //생성된 Column을 DataTable에 Add
                dt.Columns.Add(colName);
                dt.Columns.Add(colSex);
                dt.Columns.Add(colRef);
            }
            else  // 기존 Table이 있을 경우 기존 Table을 가져온다
            {
                dt = ds.Tables[cboxRegClass.Text];
            }
 
 
            //Row 생성
            DataRow row = dt.NewRow();
            row["NAME"= tboxRegName.Text;
 
            if (rdoRegSexFemale.Checked)
            {
                row["SEX"= "여자";
            }
            else if (rdoRegSexMale.Checked)
            {
                row["SEX"= "남자";
            }
 
            row["REF"= tboxRegRef.Text;
 
 
            //dt.Rows.Add(row);
 
            //ds.Tables.Add(dt);
            //if (bCheckIsTalbe)
            //{
            //    ds.Tables.Remove(cboxRegClass.Text);
            //    ds.Tables.Add(dt);
            //}
 
            //생성된 Row을 DataTable에 Add
            if (bCheckIsTalbe)
            {
                ds.Tables[cboxRegClass.Text].Rows.Add(row);  // DataSet에 해당 DataTalbe이 있을 경우 기존 Table에 Row를 추가한다
            }
            else
            {
                dt.Rows.Add(row);   // 신규로 작성한 DataTable에 Row를 등록 하고, 
                ds.Tables.Add(dt);  // 등록한 DataTable을 DataSet에 추가한다
            }
 
            cboxViewClass_SelectedIndexChanged(thisnull);
        }
 
 
        /// <summary>
        /// DataSet에 있는 DataTable을 찾아서 선택한 DataRow를 삭제
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnViewDataDel_Click(object sender, EventArgs e)
        {
            int iSelectRow = dgViewInfo.SelectedRows[0].Index;  // 선택 한 Row 중에서 첫번째 Row번호를 가져온다
            ds.Tables[cboxViewClass.Text].Rows.RemoveAt(iSelectRow);   // Table에서 선택한 Row를 삭제 한다
 
            cboxViewClass_SelectedIndexChanged(thisnull);
        }
 
 
        /// <summary>
        /// View 부분의 Combobox의 값을 변경 했을 경우 해당하는 Datagrid를 새로 표시해 주기 위해 사용
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cboxViewClass_SelectedIndexChanged(object sender, EventArgs e)
        {
            dgViewInfo.DataSource = ds.Tables[cboxViewClass.Text];
 
 
            // DatagridView Cell 정렬 및 Number를 적용
            foreach (DataGridViewRow oRow in dgViewInfo.Rows)
            {
                oRow.HeaderCell.Value = oRow.Index.ToString();
            }
            dgViewInfo.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
        }
 
        
    }
}
 
cs



수정 Button 추가)


수정 하는 부분을 추가 하였습니다. 


Button을 하나 추가 해서 아래 Source를 붙여 넣으시면 됩니다. 


 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
/// <summary>
        /// 수정
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnModify_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(tboxRegName.Text))
            {
                foreach (DataRow oitem in ds.Tables[cboxRegClass.Text].Rows)
                {
                    if (oitem["NAME"].Equals(tboxRegName.Text))
                    {
                        if (rdoRegSexFemale.Checked)
                        {
                            oitem["SEX"= "여자";
                        }
                        else if (rdoRegSexMale.Checked)
                        {
                            oitem["SEX"= "남자";
                        }
 
                        oitem["REF"= tboxRegRef.Text;
                    }
                }
 
                cboxViewClass_SelectedIndexChanged(thisnull);
            }
        }
cs



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함