Auf Englisch lesen

Freigeben über


DataGridView.SelectionChanged Ereignis

Definition

Tritt auf, wenn sich die aktuelle Auswahl ändert.

public event EventHandler SelectionChanged;
public event EventHandler? SelectionChanged;

Ereignistyp

Beispiele

Im folgenden Codebeispiel wird die Verwendung dieses Ereignisses veranschaulicht. Im Beispiel zeigt das Formular die Summe der Werte in den ausgewählten Zellen an und aktualisiert die Summe, wenn sich die Auswahl ändert.

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)
                {

                    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;
        }
    }
}

Hinweise

Dieses Ereignis tritt immer dann auf, wenn Zellen ausgewählt oder die Auswahl abgebrochen wird, unabhängig davon, ob programmgesteuert oder durch Benutzeraktion. Dieses Ereignis ist beispielsweise nützlich, wenn Sie die Summe der aktuell ausgewählten Zellen anzeigen möchten.

Wenn Sie den Wert der CurrentCell -Eigenschaft ändern, tritt das SelectionChanged Ereignis vor dem Ereignis auf CurrentCellChanged . Jeder SelectionChanged Ereignishandler, der zu diesem Zeitpunkt auf die CurrentCell Eigenschaft zugreift, erhält seinen vorherigen Wert.

Weitere Informationen zum Behandeln von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.

Gilt für:

Produkt Versionen
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

Weitere Informationen