방법: Windows Forms DataGridView 컨트롤에서 데이터 형식 사용자 지정
다음 코드 예제에서는 셀의 열 및 값에 따라 셀의 표시 방법을 변경하는 DataGridView.CellFormatting 이벤트에 대한 처리기를 구현하는 방법을 보여 줍니다.
Balance 열에서 음수를 포함하는 셀은 배경색이 빨강입니다. 이러한 셀의 형식을 통화로 지정하여 음수 값을 괄호로 묶을 수도 있습니다. 자세한 내용은 방법: Windows Forms DataGridView 컨트롤의 데이터 형식 지정을 참조하십시오.
Priority 열의 셀에는 해당 텍스트 셀 값 대신 이미지가 표시됩니다. DataGridViewCellFormattingEventArgs의 Value 속성은 텍스트 셀 값을 가져오고 해당 이미지 표시 값을 설정하는 데 모두 사용됩니다.
예제
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
Inherits Form
Private WithEvents dataGridView1 As New DataGridView()
Private highPriImage As Bitmap
Private mediumPriImage As Bitmap
Private lowPriImage As Bitmap
Public Sub New()
' Initialize the images.
Try
highPriImage = New Bitmap("highPri.bmp")
mediumPriImage = New Bitmap("mediumPri.bmp")
lowPriImage = New Bitmap("lowPri.bmp")
Catch ex As ArgumentException
MessageBox.Show("The Priority column requires Bitmap images" & _
"named highPri.bmp, mediumPri.bmp, and lowPri.bmp " & _
"residing in the same directory as the executable file.")
End Try
' Initialize the DataGridView.
With dataGridView1
.Dock = DockStyle.Fill
.AllowUserToAddRows = False
.Columns.AddRange( _
New DataGridViewTextBoxColumn(), _
New DataGridViewImageColumn())
.Columns(0).Name = "Balance"
.Columns(1).Name = "Priority"
.Rows.Add("-100", "high")
.Rows.Add("0", "medium")
.Rows.Add("100", "low")
End With
Me.Controls.Add(dataGridView1)
End Sub
' Changes how cells are displayed depending on their columns and values.
Private Sub dataGridView1_CellFormatting(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _
Handles dataGridView1.CellFormatting
' Set the background to red for negative values in the Balance column.
If dataGridView1.Columns(e.ColumnIndex).Name.Equals("Balance") Then
'Dim intValue As Int32
If CInt(e.Value) < 0 Then
'if Int32.TryParse((String)e.Value, out intValue) &&
' (intValue < 0))
e.CellStyle.BackColor = Color.Red
e.CellStyle.SelectionBackColor = Color.DarkRed
End If
End If
' Replace string values in the Priority column with images.
If dataGridView1.Columns(e.ColumnIndex).Name.Equals("Priority") Then
' Ensure that the value is a string.
Dim stringValue As String = TryCast(e.Value, String)
If stringValue Is Nothing Then Return
' Set the cell ToolTip to the text value.
Dim cell As DataGridViewCell = _
dataGridView1(e.ColumnIndex, e.RowIndex)
cell.ToolTipText = stringValue
' Replace the string value with the image value.
Select Case stringValue
Case "high"
e.Value = highPriImage
Case "medium"
e.Value = mediumPriImage
Case "low"
e.Value = lowPriImage
End Select
End If
End Sub
Public Sub Main()
Application.Run(New Form1())
End Sub
End Class
using System;
using System.Drawing;
using System.Windows.Forms;
public class Form1 : Form
{
private DataGridView dataGridView1 = new DataGridView();
private Bitmap highPriImage;
private Bitmap mediumPriImage;
private Bitmap lowPriImage;
public Form1()
{
// Initialize the images.
try
{
highPriImage = new Bitmap("highPri.bmp");
mediumPriImage = new Bitmap("mediumPri.bmp");
lowPriImage = new Bitmap("lowPri.bmp");
}
catch (ArgumentException)
{
MessageBox.Show("The Priority column requires Bitmap images " +
"named highPri.bmp, mediumPri.bmp, and lowPri.bmp " +
"residing in the same directory as the executable file.");
}
// Initialize the DataGridView.
dataGridView1.Dock = DockStyle.Fill;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.Columns.AddRange(
new DataGridViewTextBoxColumn(),
new DataGridViewImageColumn());
dataGridView1.Columns[0].Name = "Balance";
dataGridView1.Columns[1].Name = "Priority";
dataGridView1.Rows.Add("-100", "high");
dataGridView1.Rows.Add("0", "medium");
dataGridView1.Rows.Add("100", "low");
dataGridView1.CellFormatting +=
new System.Windows.Forms.DataGridViewCellFormattingEventHandler(
this.dataGridView1_CellFormatting);
this.Controls.Add(dataGridView1);
}
// Changes how cells are displayed depending on their columns and values.
private void dataGridView1_CellFormatting(object sender,
System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
{
// Set the background to red for negative values in the Balance column.
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Balance"))
{
Int32 intValue;
if (Int32.TryParse((String)e.Value, out intValue) &&
(intValue < 0))
{
e.CellStyle.BackColor = Color.Red;
e.CellStyle.SelectionBackColor = Color.DarkRed;
}
}
// Replace string values in the Priority column with images.
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Priority"))
{
// Ensure that the value is a string.
String stringValue = e.Value as string;
if (stringValue == null) return;
// Set the cell ToolTip to the text value.
DataGridViewCell cell = dataGridView1[e.ColumnIndex, e.RowIndex];
cell.ToolTipText = stringValue;
// Replace the string value with the image value.
switch (stringValue)
{
case "high":
e.Value = highPriImage;
break;
case "medium":
e.Value = mediumPriImage;
break;
case "low":
e.Value = lowPriImage;
break;
}
}
}
public static void Main()
{
Application.Run(new Form1());
}
}
코드 컴파일
이 예제에는 다음 사항이 필요합니다.
System, System.Drawing 및 System.Windows.Forms 어셈블리에 대한 참조
실행 파일과 동일한 디렉터리에 있는 highPri.bmp, mediumPri.bmp 및 lowPri.bmp라는 Bitmap 이미지
Visual Basic 또는 Visual C#의 명령줄에서 이 예제를 빌드하는 방법에 대한 자세한 내용은 명령줄에서 빌드(Visual Basic) 또는 csc.exe를 사용한 명령줄 빌드를 참조하십시오. Visual Studio에서 코드를 새 프로젝트에 붙여넣어 이 예제를 빌드할 수도 있습니다. 자세한 내용은 다음을 참조하십시오. 방법: Visual Studio를 사용하여 전체 Windows Forms 코드 예제 컴파일 및 실행 및 방법: Visual Studio를 사용하여 전체 Windows Forms 코드 예제 컴파일 및 실행 및 방법: Visual Studio를 사용하여 전체 Windows Forms 코드 예제 컴파일 및 실행 및 방법: Visual Studio를 사용하여 전체 Windows Forms 코드 예제 컴파일 및 실행 및 방법: Visual Studio를 사용하여 전체 Windows Forms 코드 예제 컴파일 및 실행.
참고 항목
작업
방법: Windows Forms DataGridView 컨트롤의 데이터 형식 지정
참조
DataGridViewBand.DefaultCellStyle
개념
Windows Forms DataGridView 컨트롤의 셀 스타일
Windows Forms DataGridView 컨트롤의 데이터 형식 지정