DataGridView.SelectionChanged 이벤트
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
현재 선택이 변경될 때 발생합니다.
public:
event EventHandler ^ SelectionChanged;
public event EventHandler SelectionChanged;
public event EventHandler? SelectionChanged;
member this.SelectionChanged : EventHandler
Public Custom Event SelectionChanged As EventHandler
이벤트 유형
예제
다음 코드 예제에서는이 이벤트의 사용을 보여 줍니다. 이 예제에서 양식은 선택한 셀의 값 합계를 표시하고 선택 영역이 변경될 때 합계를 업데이트합니다.
using System;
using System.Drawing;
using System.Windows.Forms;
public class Form1 : Form
{
private DataGridView DataGridView1 = new DataGridView();
private FlowLayoutPanel FlowLayoutPanel1 = new FlowLayoutPanel();
private Label Label1 = new Label();
private Label Label2 = new Label();
private Label Label3 = new Label();
private Label Label4 = new Label();
// Establish the main entry point for the application.
[STAThreadAttribute()]
public static void Main()
{
Application.Run(new Form1());
}
public Form1()
{
// Initialize the form.
// This code can be replaced with designer generated code.
AutoSize = true;
// Set the FlowLayoutPanel1 properties.
FlowLayoutPanel1.FlowDirection = FlowDirection.TopDown;
FlowLayoutPanel1.Location = new System.Drawing.Point(354, 0);
FlowLayoutPanel1.AutoSize = true;
FlowLayoutPanel1.Controls.Add(Label1);
FlowLayoutPanel1.Controls.Add(Label2);
FlowLayoutPanel1.Controls.Add(Label3);
FlowLayoutPanel1.Controls.Add(Label4);
Controls.Add(FlowLayoutPanel1);
Controls.Add(DataGridView1);
// Set the Label properties.
Label1.AutoSize = true;
Label2.AutoSize = true;
Label3.AutoSize = true;
}
protected override void OnLoad(EventArgs e)
{
PopulateDataGridView();
UpdateLabelText();
UpdateBalance();
DataGridView1.CellValidating += new
DataGridViewCellValidatingEventHandler(
DataGridView1_CellValidating);
DataGridView1.CellValidated += new DataGridViewCellEventHandler(
DataGridView1_CellValidated);
DataGridView1.CellValueChanged += new DataGridViewCellEventHandler(
DataGridView1_CellValueChanged);
DataGridView1.RowsRemoved += new DataGridViewRowsRemovedEventHandler(
DataGridView1_RowsRemoved);
DataGridView1.SelectionChanged += new EventHandler(
DataGridView1_SelectionChanged);
DataGridView1.UserAddedRow += new DataGridViewRowEventHandler(
DataGridView1_UserAddedRow);
DataGridView1.UserDeletingRow += new
DataGridViewRowCancelEventHandler(DataGridView1_UserDeletingRow);
base.OnLoad(e);
}
// Replace this with your own code to populate the DataGridView.
private void PopulateDataGridView()
{
DataGridView1.Size = new Size(350, 400);
DataGridView1.AllowUserToDeleteRows = true;
// Add columns to the DataGridView.
DataGridView1.ColumnCount = 4;
DataGridView1.SelectionMode =
DataGridViewSelectionMode.RowHeaderSelect;
// Set the properties of the DataGridView columns.
DataGridView1.Columns[0].Name = "Description";
DataGridView1.Columns[1].Name = "Withdrawals";
DataGridView1.Columns[2].Name = "Deposits";
DataGridView1.Columns[3].Name = "Balance";
DataGridView1.Columns["Description"].HeaderText = "Description";
DataGridView1.Columns["Withdrawals"].HeaderText = "W(-)";
DataGridView1.Columns["Deposits"].HeaderText = "D(+)";
DataGridView1.Columns["Balance"].HeaderText = "Balance";
DataGridView1.Columns["Balance"].ReadOnly = true;
DataGridView1.Columns["Description"].SortMode =
DataGridViewColumnSortMode.NotSortable;
DataGridView1.Columns["Withdrawals"].SortMode =
DataGridViewColumnSortMode.NotSortable;
DataGridView1.Columns["Deposits"].SortMode =
DataGridViewColumnSortMode.NotSortable;
DataGridView1.Columns["Balance"].SortMode =
DataGridViewColumnSortMode.NotSortable;
// Add rows of data to the DataGridView.
DataGridView1.Rows.Add(new string[] {
"Starting Balance", "", "", "1000" });
DataGridView1.Rows.Add(new string[] {
"Paycheck Deposit", "", "850", "" });
DataGridView1.Rows.Add(new string[] { "Rent", "-500", "", "" });
DataGridView1.Rows.Add(new string[] { "Groceries", "-25", "", "" });
DataGridView1.Rows.Add(new string[] { "Tax Return", "", "300", "" });
// Allow the user to edit the starting balance cell
DataGridView1.Rows[0].ReadOnly = true;
DataGridView1.Rows[0].Cells["Balance"].ReadOnly = false;
// Autosize the columns.
DataGridView1.AutoResizeColumns();
}
private void DataGridView1_CellValueChanged(
object sender, DataGridViewCellEventArgs e)
{
// Update the balance column whenever the value of any cell changes.
UpdateBalance();
}
private void DataGridView1_RowsRemoved(
object sender, DataGridViewRowsRemovedEventArgs e)
{
// Update the balance column whenever rows are deleted.
UpdateBalance();
}
private void UpdateBalance()
{
int counter;
int balance;
int deposit;
int withdrawal;
// Iterate through the rows, skipping the Starting Balance row.
for (counter = 1; counter < (DataGridView1.Rows.Count - 1);
counter++)
{
deposit = 0;
withdrawal = 0;
balance = int.Parse(DataGridView1.Rows[counter - 1]
.Cells["Balance"].Value.ToString());
if (DataGridView1.Rows[counter].Cells["Deposits"].Value != null)
{
// Verify that the cell value is not an empty string.
if (DataGridView1.Rows[counter]
.Cells["Deposits"].Value.ToString().Length != 0)
{
deposit = int.Parse(DataGridView1.Rows[counter]
.Cells["Deposits"].Value.ToString());
}
}
if (DataGridView1.Rows[counter].Cells["Withdrawals"].Value != null)
{
if (DataGridView1.Rows[counter]
.Cells["Withdrawals"].Value.ToString().Length != 0)
{
withdrawal = int.Parse(DataGridView1.Rows[counter]
.Cells["Withdrawals"].Value.ToString());
}
}
DataGridView1.Rows[counter].Cells["Balance"].Value =
(balance + deposit + withdrawal).ToString();
}
}
private void DataGridView1_SelectionChanged(object sender, EventArgs e)
{
// Update the labels to reflect changes to the selection.
UpdateLabelText();
}
private void DataGridView1_UserAddedRow(
object sender, DataGridViewRowEventArgs e)
{
// Update the labels to reflect changes to the number of entries.
UpdateLabelText();
}
private void UpdateLabelText()
{
int WithdrawalTotal = 0;
int DepositTotal = 0;
int SelectedCellTotal = 0;
int counter;
// Iterate through all the rows and sum up the appropriate columns.
for (counter = 0; counter < (DataGridView1.Rows.Count);
counter++)
{
if (DataGridView1.Rows[counter].Cells["Withdrawals"].Value
!= null)
{
if (DataGridView1.Rows[counter].
Cells["Withdrawals"].Value.ToString().Length != 0)
{
WithdrawalTotal += int.Parse(DataGridView1.Rows[counter].
Cells["Withdrawals"].Value.ToString());
}
}
if (DataGridView1.Rows[counter].Cells["Deposits"].Value != null)
{
if (DataGridView1.Rows[counter]
.Cells["Deposits"].Value.ToString().Length != 0)
{
DepositTotal += int.Parse(DataGridView1.Rows[counter]
.Cells["Deposits"].Value.ToString());
}
}
}
// Iterate through the SelectedCells collection and sum up the values.
for (counter = 0;
counter < (DataGridView1.SelectedCells.Count); counter++)
{
if (DataGridView1.SelectedCells[counter].FormattedValueType ==
Type.GetType("System.String"))
{
string value = null;
// If the cell contains a value that has not been commited,
// use the modified value.
if (DataGridView1.IsCurrentCellDirty == true)
{
value = DataGridView1.SelectedCells[counter]
.EditedFormattedValue.ToString();
}
else
{
value = DataGridView1.SelectedCells[counter]
.FormattedValue.ToString();
}
if (value != null)
{
// Ignore cells in the Description column.
if (DataGridView1.SelectedCells[counter].ColumnIndex !=
DataGridView1.Columns["Description"].Index)
{
if (value.Length != 0)
{
SelectedCellTotal += int.Parse(value);
}
}
}
}
}
// Set the labels to reflect the current state of the DataGridView.
Label1.Text = "Withdrawals Total: " + WithdrawalTotal.ToString();
Label2.Text = "Deposits Total: " + DepositTotal.ToString();
Label3.Text = "Selected Cells Total: " + SelectedCellTotal.ToString();
Label4.Text = "Total entries: " + DataGridView1.RowCount.ToString();
}
private void DataGridView1_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
int testint;
if (e.ColumnIndex != 0)
{
if (e.FormattedValue.ToString().Length != 0)
{
// Try to convert the cell value to an int.
if (!int.TryParse(e.FormattedValue.ToString(), out testint))
{
DataGridView1.Rows[e.RowIndex].ErrorText =
"Error: Invalid entry";
e.Cancel = true;
}
}
}
}
private void DataGridView1_CellValidated(object sender,
DataGridViewCellEventArgs e)
{
// Clear any error messages that may have been set in cell validation.
DataGridView1.Rows[e.RowIndex].ErrorText = null;
}
private void DataGridView1_UserDeletingRow(object sender,
DataGridViewRowCancelEventArgs e)
{
DataGridViewRow startingBalanceRow = DataGridView1.Rows[0];
// Check if the Starting Balance row is included in the selected rows
if (DataGridView1.SelectedRows.Contains(startingBalanceRow))
{
// Do not allow the user to delete the Starting Balance row.
MessageBox.Show("Cannot delete Starting Balance row!");
// Cancel the deletion if the Starting Balance row is included.
e.Cancel = true;
}
}
}
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
Inherits Form
Private WithEvents DataGridView1 As New DataGridView()
Private FlowLayoutPanel1 As New FlowLayoutPanel()
Private Label1 As New Label()
Private Label2 As New Label()
Private Label3 As New Label()
Private Label4 As New Label()
' Establish the main entry point for the application.
<STAThreadAttribute()> _
Public Shared Sub Main()
Application.Run(New Form1())
End Sub
Public Sub New()
' Set the FlowLayoutPanel1 properties.
With Me
.AutoSize = True
With .FlowLayoutPanel1
.FlowDirection = FlowDirection.TopDown
.Location = New System.Drawing.Point(354, 0)
.AutoSize = True
.Controls.Add(Label1)
.Controls.Add(Label2)
.Controls.Add(Label3)
.Controls.Add(Label4)
End With
.Controls.Add(Me.FlowLayoutPanel1)
.Controls.Add(DataGridView1)
' Set the Label properties.
.Label1.AutoSize = True
.Label2.AutoSize = True
.Label3.AutoSize = True
.PopulateDataGridView()
.UpdateLabelText()
.UpdateBalance()
End With
End Sub
' Replace this with your own code to populate the DataGridView.
Private Sub PopulateDataGridView()
With Me.DataGridView1
.Size = New Size(350, 400)
.AllowUserToDeleteRows = True
' Add columns to the DataGridView.
.ColumnCount = 4
.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect
' Set the properties of the DataGridView columns.
.Columns(0).Name = "Description"
.Columns(1).Name = "Withdrawals"
.Columns(2).Name = "Deposits"
.Columns(3).Name = "Balance"
.Columns("Description").HeaderText = "Description"
.Columns("Withdrawals").HeaderText = "W(-)"
.Columns("Deposits").HeaderText = "D(+)"
.Columns("Balance").HeaderText = "Balance"
.Columns("Balance").ReadOnly = True
.Columns("Description").SortMode = _
DataGridViewColumnSortMode.NotSortable
.Columns("Withdrawals").SortMode = _
DataGridViewColumnSortMode.NotSortable
.Columns("Deposits").SortMode = _
DataGridViewColumnSortMode.NotSortable
.Columns("Balance").SortMode = _
DataGridViewColumnSortMode.NotSortable
End With
' Add rows of data to the DataGridView.
With Me.DataGridView1.Rows
.Add(New String() {"Starting Balance", "", "", "1000"})
.Add(New String() {"Paycheck Deposit", "", "850", ""})
.Add(New String() {"Rent", "-500", "", ""})
.Add(New String() {"Groceries", "-25", "", ""})
.Add(New String() {"Tax Return", "", "300", ""})
End With
' Allow the user to edit the starting balance cell
DataGridView1.Rows(0).ReadOnly = True
DataGridView1.Rows(0).Cells("Balance").ReadOnly = False
' Autosize the columns.
Me.DataGridView1.AutoResizeColumns()
End Sub
Private Sub CellValueChanged(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles DataGridView1.CellValueChanged
' Update the balance column whenever the values of any cell changes.
UpdateBalance()
End Sub
Private Sub RowsRemoved(ByVal sender As Object, _
ByVal e As DataGridViewRowsRemovedEventArgs) _
Handles DataGridView1.RowsRemoved
' Update the balance column whenever rows are deleted.
UpdateBalance()
End Sub
Private Sub UpdateBalance()
Dim counter As Integer
Dim balance As Integer
Dim deposit As Integer
Dim withdrawal As Integer
' Iterate through the rows, skipping the Starting Balance Row.
For counter = 1 To (DataGridView1.Rows.Count - 2)
deposit = 0
withdrawal = 0
balance = Integer.Parse(DataGridView1.Rows(counter - 1) _
.Cells("Balance").Value.ToString())
If Not DataGridView1.Rows(counter) _
.Cells("Deposits").Value Is Nothing Then
' Verify that the cell value is not an empty string.
If Not DataGridView1.Rows(counter) _
.Cells("Deposits").Value.ToString().Length = 0 Then
deposit = Integer.Parse(DataGridView1.Rows(counter) _
.Cells("Deposits").Value.ToString())
End If
End If
If Not DataGridView1.Rows(counter) _
.Cells("Withdrawals").Value Is Nothing Then
If Not DataGridView1.Rows(counter) _
.Cells("Withdrawals").Value.ToString().Length = 0 Then
withdrawal = Integer.Parse(DataGridView1.Rows(counter) _
.Cells("Withdrawals").Value.ToString())
End If
End If
DataGridView1.Rows(counter).Cells("Balance").Value = _
(balance + deposit + withdrawal).ToString()
Next
End Sub
Private Sub SelectionChanged(ByVal sender As Object, _
ByVal e As EventArgs) Handles DataGridView1.SelectionChanged
' Update the labels to reflect changes to the selection.
UpdateLabelText()
End Sub
Private Sub UserAddedRow(ByVal sender As Object, _
ByVal e As DataGridViewRowEventArgs) _
Handles DataGridView1.UserAddedRow
' Update the labels to reflect changes to the number of entries.
UpdateLabelText()
End Sub
Private Sub UpdateLabelText()
Dim WithdrawalTotal As Integer = 0
Dim DepositTotal As Integer = 0
Dim SelectedCellTotal As Integer = 0
Dim counter As Integer
' Iterate through all the rows and sum up the appropriate columns.
For counter = 0 To (DataGridView1.Rows.Count - 1)
If Not DataGridView1.Rows(counter) _
.Cells("Withdrawals").Value Is Nothing Then
If Not DataGridView1.Rows(counter) _
.Cells("Withdrawals").Value.ToString().Length = 0 Then
WithdrawalTotal += _
Integer.Parse(DataGridView1.Rows(counter) _
.Cells("Withdrawals").Value.ToString())
End If
End If
If Not DataGridView1.Rows(counter) _
.Cells("Deposits").Value Is Nothing Then
If Not DataGridView1.Rows(counter) _
.Cells("Deposits").Value.ToString().Length = 0 Then
DepositTotal += _
Integer.Parse(DataGridView1.Rows(counter) _
.Cells("Deposits").Value.ToString())
End If
End If
Next
' Iterate through the SelectedCells collection and sum up the values.
For counter = 0 To (DataGridView1.SelectedCells.Count - 1)
If DataGridView1.SelectedCells(counter).FormattedValueType Is _
Type.GetType("System.String") Then
Dim value As String = Nothing
' If the cell contains a value that has not been commited,
' use the modified value.
If (DataGridView1.IsCurrentCellDirty = True) Then
value = DataGridView1.SelectedCells(counter) _
.EditedFormattedValue.ToString()
Else
value = DataGridView1.SelectedCells(counter) _
.FormattedValue.ToString()
End If
If value IsNot Nothing Then
' Ignore cells in the Description column.
If Not DataGridView1.SelectedCells(counter).ColumnIndex = _
DataGridView1.Columns("Description").Index Then
If Not value.Length = 0 Then
SelectedCellTotal += Integer.Parse(value)
End If
End If
End If
End If
Next
' Set the labels to reflect the current state of the DataGridView.
Label1.Text = "Withdrawals Total: " & WithdrawalTotal.ToString()
Label2.Text = "Deposits Total: " & DepositTotal.ToString()
Label3.Text = "Selected Cells Total: " & SelectedCellTotal.ToString()
Label4.Text = "Total entries: " & DataGridView1.RowCount.ToString()
End Sub
Private Sub CellValidating(ByVal sender As Object, _
ByVal e As DataGridViewCellValidatingEventArgs) _
Handles DataGridView1.CellValidating
Dim testInteger As Integer
If Not e.ColumnIndex = 0 Then
If Not e.FormattedValue.ToString().Length = 0 Then
' Try to convert the cell value to an Integer.
If Not Integer.TryParse(e.FormattedValue.ToString(), _
testInteger) Then
DataGridView1.Rows(e.RowIndex).ErrorText = _
"Error: Invalid entry"
e.Cancel = True
End If
End If
End If
End Sub
Private Sub CellValidated(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles DataGridView1.CellValidated
' Clear any error messages that may have been set in cell validation.
DataGridView1.Rows(e.RowIndex).ErrorText = Nothing
End Sub
Private Sub UserDeletingRow(ByVal sender As Object, _
ByVal e As DataGridViewRowCancelEventArgs) _
Handles DataGridView1.UserDeletingRow
Dim startingBalanceRow As DataGridViewRow = DataGridView1.Rows(0)
' Check if the starting balance row is included in the selected rows
If DataGridView1.SelectedRows.Contains(startingBalanceRow) Then
' Do not allow the user to delete the Starting Balance row.
MessageBox.Show("Cannot delete Starting Balance row!")
' Cancel the deletion if the Starting Balance row is included.
e.Cancel = True
End If
End Sub
End Class
설명
이 이벤트는 프로그래밍 방식으로 또는 사용자 작업에 의해 셀을 선택하거나 선택이 취소될 때마다 발생합니다. 예를 들어 이 이벤트는 현재 선택한 셀의 합계를 표시하려는 경우에 유용합니다.
속성 SelectionChanged 값을 CurrentCell 변경하면 이벤트가 이벤트 전에 CurrentCellChanged 발생합니다. 현재 속성에 CurrentCell 액세스하는 모든 SelectionChanged 이벤트 처리기는 이전 값을 가져옵니다.
이벤트를 처리 하는 방법에 대 한 자세한 내용은 참조 하세요. 이벤트 처리 및 발생합니다.
적용 대상
추가 정보
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET