VB.NET 2008/VB - 데이터 그리드 뷰

DataGridView - 꾸미는 방법

본클라쓰 2011. 4. 26. 11:16

 

 

 

DataGridView을 사용자에 맞게 꾸미는 방법

 

 DataGridView가 지원하는 다양한 속성을 사용하여 DataGridView를 좀 더 사용자에 맞게 모양을 변경할 수 있습니다.

 

 

 

1) Row Header에 줄 번호 매기기

 

 DataGridView에서는 Row Header에 줄 번호를 매기는 속성이 없습니다. 따라서 이벤트와 연결하여 줄 번호를 매겨야 합니다. 이때 연결하는 이벤트는 RowPostPaing 이벤트이며, 이때 전달받는 DataGridViewRowPostPaintEventArgs 인자의 Graphics.DrawString() 메소드를 통해 헤더에 번호를 매길 수 있습니다.

 

Private Sub Dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) _

Handles Dgv.RowPostPaint

 

    Dim DrwString = e.RowIndex + 1

    Dim font = Me.Dgv.RowHeadersDefaultCellStyle.Font

    Dim brush = Brushes.Aqua

 

    Dim x = e.RowBounds.Location!.X + 18

    Dim y = e.RowBounds.Location!.Y + 5

 

    e.Graphics.DrawString(DrwString, font, brush, x, y)

 

End Sub

 

 

 

2. 홀수행마다 다른 색으로 표현하기

 

 홀수행마다 다른 색으로 보여주고 싶다면 AlternationRowsDefaultCellStyle 속성의 BackColor 속성에 색상값을 지정하면 됩니다.

Private Sub SetAlternation()
    DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Blue
End Sub

 

 

 

3. 한 개의 열이나 한 개의 행만 선택하도록 하기

 

 DataGridView는 기본적으로 여러 개의 열과 행을 선택할 수 있는데 이를 막고 한 개의 열이나 한 개의 행만 선택하도록 하고 싶다면 MultiSelect 속성을 'false'로 지정하면 됩니다.

 

 

 

4.  행 단위로 클릭하도록 만들고 싶을 때

 

 DataGridView는 기본적으로 열 단위로 클릭하도록 처리되어 있는데, 이를 행 단위로 클릭할 수 있는 기능도 있습니다. 이 기능은 SelectionMode 속성에 DataGridViewSelectionMode.FullRowSelect로 지정하면 됩니다.

 

 

 

5. 특정 행이나 열을 고정시키고 스크롤하지 못하도록 막고 싶을 때

 

Frozen 속성 : 열을 고정시키기 위한 속성으로 고정시키기 위한 열을 지정하고 true 값을 선언하면 해당 열의 좌측 열은 전부 고정되어 스크롤 할 수 없게 됩니다.

DataGridView.Columns[1].Frozen = true

 

DividerWidth 속성 : 구분석 폭 변경을 할 때 사용하는 속성으로 이를 통해서 열 사이의 구분선을 약간 두껍게 표현하여 보다 직관적으로 구분할 수 있습니다.

DataGridView.Columns[1].DividerWidth = 3

 

 

 

6. 특정값을 가진 열을 좀 다르게 보여주고 싶을 때

 

 특정값을 가진 열을 좀 더 강조하여 보여주고 싶은 경우가 종종 생깁니다. 이 때 CellFormatign 이벤트 핸들러를 이용합니다. 본래 이 이벤트 핸들러는 특정 값을 가진 열의 독립적인 서식을 적용하기 위한 것으로 열 스타일만 변경할 수 있습니다.

Private Sub ChangeSpecialValue(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting

    If (e.ColumnIndex = 1) Then
        If (e.Value IsNot Nothing) Then
            Dim text As String = e.Value.ToString


            If (text.Contains("100")) Then
                e.CellStyle.ForeColor = Color.Red
                e.CellStyle.SelectionForeColor = Color.Red
            End If

 

        End If
    End If

End Sub

 

 

 

7) 열에 보여지는 문자열을 여러행으로 보여주고 싶을 때

 

 열에 표시되는 문자열이 길게 되면 한 줄로 보여주지만 오버되면 잘려서 안보여줍니다. 이때 열 스타일의 WrapMode 속성을 DataGridViewTriState.True로 설정하며 셀 크기안에서 오버될 때 여러 행으로 해당 텍스트를 모두 보여줍니다. 또한 다음줄로 넘어간 문자열이 발생하면 행의 높이는 자동으로 조절되는데 AutoSizeRowMode 속성에 DataGridViewAutoSizeRowsMode.AllCells로 설정하면 됩니다.

 

 

 

8) 초기 선택된 셀표시 없애기

 

 DataGridView에 데이터 바인딩이 끝나면 초기 화면에서 선택된 셀이 표시됩니다.

 

 위의 사진처럼 사용자 정보를 조회한 후 맨 위의 첫 셀에 포커스가 있으며 셀이 선택되어 있습니다. 초기 선택된 셀의 값은 ColumnIndex는 1, RowIndex는 0입니다. 이 선택된 셀이 보기 싫다면, 선택된 셀을 없앨 수 있는데, DataBindingComplete 이벤트에 연결하여 DataGridView의 CurrentCell 속성에 null 값을 지정하면 됩니다. 

Private Sub DataGridView_DataBindingComplete(ByVal sender As Object, ByVal e As Windows.Forms.DataGridVeiwBindingCompleteEventArgs) Handles DataGridView.DataBingingComplete

 

    DataGridView.CurrentCell = Nothing

 

End Sub

 

 

9) DataGridView의 셀에 데이터가 다 차면 수행되는 이벤트

 

 통계 수치를 출력할 때 셀의 데이터를 수집하여 총계나 평균을 구하는 경우가 있습니다. 이 때는 DataBindingComplete 이벤트 핸들러를 사용하면 쉽게 총계나 평균을 구할 수 있습니다. 

Private Sub DGV_DataBindingComplete(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles DataGridView1.DataBindingComplete

 

    Dim count As Integer = 0
    For Each row As System.Windows.Forms.DataGridViewRow In sender.Rows
        count += row.Cells.Item(4).Value
    Next
    TotalLabel.Text = count

 

End Sub