ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 비주얼 베이직 .Net 강좌 - 2. DataGridView 사용법
    Visual Basic . Net 2016. 8. 20. 23:45

    강좌이긴 한데.. 처음부터 A-Z까지의 내용을 다루는 것이 아니라.. 제가 작성할 프로그램에 관련된 부분들만 우선적으로 공부하고 있어서.. 올리는 내용도 그렇게 될 것 같습니다. 


    새로운 프로젝트를 생성한 후. 아래 그림처럼 Form위에 DataGridView 1개, 라벨 2개, 텍스트박스 2개, 버튼 3개를 올리고 각각의 Name을 빨간색으로 적은 문자열로 하였습니다. 

    두개의 페이지가 존재하는데 Form1.vb는 코드를 작성하는 페이지이고 Form1.vb[디자인]은 폼의 UI를 디자인하는 페이지입니다. 


    From1을 선택한 상태에서 마우스 오른쪽 버튼을 눌러 나온 메뉴에서 속성을 선택합니다. 오른쪽에 속성창이 뜨면 상단에 보이는 이벤트 버튼을 클릭합니다. 


    동작 항목에서 Load를 선택한 후.. 옆에 있는 빈 공간을 더블클릭합니다. 


    Form1.vb에 아래와 같이 코드가 생성된 것이 보이게 됩니다.

    1
    2
    3
    4
    5
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
        End Sub
    End Class
    cs

    DataGridView를 초기화하기 위한 내용을 추가합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class Form1
        '폼이 로드 될때 호출됨
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
     
            'DataGridView를 선택하면 전체 한줄이 선택되게 됩니다. 
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
     
            '컬럼 2개를 생성하고 각각의 이름을 정해줍니다. DataGridView1의 상단에 위치하게 됩니다. 
            DataGridView1.ColumnCount = 2
            DataGridView1.Columns(0).Name = "이름"
            DataGridView1.Columns(1).Name = "주소"
        End Sub
    End Class
    cs

     

    실행을 시켜보면 DataGridView의 상단에 헤더가 추가된 것을 볼 수 있습니다.


    프로그램을 종료시키고 다시 Form1.vb[디자인]으로 돌아와서 추가 버튼을 더블클릭합니다. 그러면 Form1.vb에 아래처럼 코드가 추가됩니다. 

    1
    2
    3
        Private Sub add_Button_Click(sender As Object, e As EventArgs) Handles add_Button.Click
     
        End Sub
    cs


    추가버튼을 클릭시 이름 텍스트박스와 주소 텍스트박스의 내용을 DataGridView에 추가하고 택스트박스를 비우는 코드를 추가해줍니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        '추가 버튼 클릭시 호출됨
        Private Sub add_Button_Click(sender As Object, e As EventArgs) Handles add_Button.Click
     
            '공백을 입력할 수 없도록 에러처리 
            If name_TextBox.Text = "" Or address_TextBox.Text = "" Then
                MsgBox("데이터를 입력하세요")
                Return
            End If
     
            'DataGridView의 한 줄에 추가될 데이터를 배열에 넣습니다.
            Dim row As String() = New String() {name_TextBox.Text, address_TextBox.Text}
     
            '배열을 DataGridView에 추가합니다.
            DataGridView1.Rows.Add(row)
     
            '데이터가 입력되었던 텍스트박스를 비웁니다.
            name_TextBox.Text = ""
            address_TextBox.Text = ""
     
        End Sub
    cs


    실행킨 후.. 텍스트 박스에 내용을 채운 후 추가 버튼을 클릭하면 DataGridView에 추가되는 것을 확인 할 수 있습니다. 


    이제 입력된 내용을 수정하는 것을 추가합니다. 우선 이미 DataGirdView에 입력된 데이터를 선택시 해당 데이터들이 텍스트뷰에 입력되도록 해야 합니다. 

    DataGrdiView를 선택하고 오른쪽 상단에 있는 속성을 선택합니다.  마우스 하위 항목에 있는 CellClick옆에 있는 공간을  더블클릭합니다.


    그러면 Form1.vb에 코드가 추가됩니다. 

    1
    2
    3
        Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
     
        End Sub
    cs


    셀을 선택시 해당 행의 내용을 택스트박스에 출력하기 위한 코드를 추가합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        'DataGridView1의 셀을 클릭시 호출됩니다. 
        Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
     
            If (e.RowIndex > -1And Not (DataGridView1.SelectedRows(0).Cells(0).Value = NothingThen
                'DataGridView1에서 선택된 행의 첫번째 셀의 값을 name_TextBox의 내용으로 합니다.
                name_TextBox.Text = DataGridView1.SelectedRows(0).Cells(0).Value.ToString
     
                'DataGridView1에서 선택된 행의 두번째 셀의 값을 address_TextBox의 내용으로 합니다.
                address_TextBox.Text = DataGridView1.SelectedRows(0).Cells(1).Value.ToString
            Else
                name_TextBox.Text = ""
                address_TextBox.Text = ""
            End If
        End Sub
    cs


    실행시키고 DataGridView에 값을 추가한 후, DataGridView의 셀을 선택해보면 대응되는 행의 데이터들이 텍스트박스에 입력되는 것을 볼 수 있습니다. 

    이제 업데이트 버튼을 더블클릭합니다. 그러면 다음처럼 From1.vb에 코드가 추가되는 코드에 텍스트 박스에 있는 내용을 DataGridView의 셀값으로 업데이트하는 코드를 추가합니다.

    1
    2
    3
    4
    5
        '업데이트 버튼 클릭시 호출됩니다.
        Private Sub update_Button_Click(sender As Object, e As EventArgs) Handles update_Button.Click
            DataGridView1.SelectedRows(0).Cells(0).Value = name_TextBox.Text
            DataGridView1.SelectedRows(0).Cells(1).Value = address_TextBox.Text
        End Sub
    cs


    이제 삭제 버튼을 더블클릭하여 추가되는 코드에 선택된 행을 삭제하는 코드를 작성합니다. 셀을 선택하고 삭제 버튼을 클릭하면 해당 셀이 속하는 행이 삭제됩니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        '삭제 버튼 클릭시 호출됨
        Private Sub delete_Button_Click(sender As Object, e As EventArgs) Handles delete_Button.Click
            '삭제할 수 없는 셀인 경우 에러처리
            If DataGridView1.SelectedRows(0).Cells(0).Value = Nothing Then
                Return
            End If
     
     
            Dim msgResult As MsgBoxResult = MsgBox("삭제하시겠습니까?", MsgBoxStyle.YesNo)
     
            If msgResult = MsgBoxResult.Yes Then
                DataGridView1.Rows.RemoveAt(DataGridView1.SelectedRows(0).Index)
     
                name_TextBox.Text = ""
                address_TextBox.Text = ""
     
            End If
     
        End Sub
    cs


    다음은 전체 소스코드입니다.

    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
    Public Class Form1
        '폼이 로드 될때 호출됨
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
     
            'DataGridView를 선택하면 전체 한줄이 선택되게 됩니다. 
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
     
            '컬럼 2개를 생성하고 각각의 이름을 정해줍니다. DataGridView1의 상단에 위치하게 됩니다. 
            DataGridView1.ColumnCount = 2
            DataGridView1.Columns(0).Name = "이름"
            DataGridView1.Columns(1).Name = "주소"
        End Sub
     
        '추가 버튼 클릭시 호출됨
        Private Sub add_Button_Click(sender As Object, e As EventArgs) Handles add_Button.Click
     
            '공백을 입력할 수 없도록 에러처리 
            If name_TextBox.Text = "" Or address_TextBox.Text = "" Then
                MsgBox("데이터를 입력하세요")
                Return
            End If
     
            'DataGridView의 한 줄에 추가될 데이터를 배열에 넣습니다.
            Dim row As String() = New String() {name_TextBox.Text, address_TextBox.Text}
     
            '배열을 DataGridView에 추가합니다.
            DataGridView1.Rows.Add(row)
     
            '데이터가 입력되었던 텍스트박스를 비웁니다.
            name_TextBox.Text = ""
            address_TextBox.Text = ""
     
        End Sub
     
        'DataGridView1의 셀을 클릭시 호출됩니다. 
        Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
     
            If (e.RowIndex > -1And Not (DataGridView1.SelectedRows(0).Cells(0).Value = NothingThen
                'DataGridView1에서 선택된 행의 첫번째 셀의 값을 name_TextBox의 내용으로 합니다.
                name_TextBox.Text = DataGridView1.SelectedRows(0).Cells(0).Value.ToString
     
                'DataGridView1에서 선택된 행의 두번째 셀의 값을 address_TextBox의 내용으로 합니다.
                address_TextBox.Text = DataGridView1.SelectedRows(0).Cells(1).Value.ToString
            Else
                name_TextBox.Text = ""
                address_TextBox.Text = ""
            End If
        End Sub
     
        '업데이트 버튼 클릭시 호출됩니다.
        Private Sub update_Button_Click(sender As Object, e As EventArgs) Handles update_Button.Click
            DataGridView1.SelectedRows(0).Cells(0).Value = name_TextBox.Text
            DataGridView1.SelectedRows(0).Cells(1).Value = address_TextBox.Text
        End Sub
     
        '삭제 버튼 클릭시 호출됨
        Private Sub delete_Button_Click(sender As Object, e As EventArgs) Handles delete_Button.Click
            '삭제할 수 없는 셀인 경우 에러처리
            If DataGridView1.SelectedRows(0).Cells(0).Value = Nothing Then
                Return
            End If
     
     
            Dim msgResult As MsgBoxResult = MsgBox("삭제하시겠습니까?", MsgBoxStyle.YesNo)
     
            If msgResult = MsgBoxResult.Yes Then
                DataGridView1.Rows.RemoveAt(DataGridView1.SelectedRows(0).Index)
     
                name_TextBox.Text = ""
                address_TextBox.Text = ""
     
            End If
     
        End Sub
    End Class
    cs


    전체 프로젝트 파일입니다.

    DataGridView_Example.zip



    참고

    https://www.youtube.com/watch?v=arJYVEMgZao


    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구독하기


    댓글 1

    • jjamgo 2018.06.08 15:40


      datagridview에 "사과"를 클릭하면 첫행에 아무것도 없으면 다음처럼 추가되고
      이름 단가 개수 합계
      사과 | 100 | 1 | 100
      첫행에 딸기가 있으면 다음행에 추가되고
      기존에 사과가 있으면 개수가 올라가고 합계가 올라가야하는데,
      조건을 어떤식으로 걸어야될지 모르겠네요.
      1.첫행에 데이터가 있는지여부
      2.같은 데이터가 datagridview에 존재하는지여부
      이 두가지가 관건인데,
      조언 해주실 수 있나요?


Designed by Tistory.