Procedimiento para obtener las celdas, filas y columnas seleccionadas en el control DataGridView de formularios Windows Forms

Las celdas, filas o columnas seleccionadas de un control DataGridView se pueden obtener mediante las propiedades correspondientes: SelectedCells, SelectedRows y SelectedColumns. En los procedimientos siguientes obtendremos las celdas seleccionadas y mostraremos sus índices de fila y columna en un objeto MessageBox.

Para obtener las celdas seleccionadas en un control DataGridView

  • Utilice la propiedad SelectedCells.

    Nota:

    Use el método AreAllCellsSelected para evitar mostrar un número de celdas potencialmente grande.

    private void selectedCellsButton_Click(object sender, System.EventArgs e)
    {
        Int32 selectedCellCount =
            dataGridView1.GetCellCount(DataGridViewElementStates.Selected);
        if (selectedCellCount > 0)
        {
            if (dataGridView1.AreAllCellsSelected(true))
            {
                MessageBox.Show("All cells are selected", "Selected Cells");
            }
            else
            {
                System.Text.StringBuilder sb =
                    new System.Text.StringBuilder();
    
                for (int i = 0;
                    i < selectedCellCount; i++)
                {
                    sb.Append("Row: ");
                    sb.Append(dataGridView1.SelectedCells[i].RowIndex
                        .ToString());
                    sb.Append(", Column: ");
                    sb.Append(dataGridView1.SelectedCells[i].ColumnIndex
                        .ToString());
                    sb.Append(Environment.NewLine);
                }
    
                sb.Append("Total: " + selectedCellCount.ToString());
                MessageBox.Show(sb.ToString(), "Selected Cells");
            }
        }
    }
    
    Private Sub selectedCellsButton_Click( _
        ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles selectedCellsButton.Click
    
        Dim selectedCellCount As Integer = _
            dataGridView1.GetCellCount(DataGridViewElementStates.Selected)
    
        If selectedCellCount > 0 Then
    
            If dataGridView1.AreAllCellsSelected(True) Then
    
                MessageBox.Show("All cells are selected", "Selected Cells")
    
            Else
    
                Dim sb As New System.Text.StringBuilder()
    
                Dim i As Integer
                For i = 0 To selectedCellCount - 1
    
                    sb.Append("Row: ")
                    sb.Append(dataGridView1.SelectedCells(i).RowIndex _
                        .ToString())
                    sb.Append(", Column: ")
                    sb.Append(dataGridView1.SelectedCells(i).ColumnIndex _
                        .ToString())
                    sb.Append(Environment.NewLine)
    
                Next i
    
                sb.Append("Total: " + selectedCellCount.ToString())
                MessageBox.Show(sb.ToString(), "Selected Cells")
    
            End If
    
        End If
    
    End Sub
    

Para obtener las filas seleccionadas en un control DataGridView

  • Utilice la propiedad SelectedRows. Para permitir que los usuarios seleccionen filas, debe establecer la propiedad SelectionMode en FullRowSelect o en RowHeaderSelect.

    private void selectedRowsButton_Click(object sender, System.EventArgs e)
    {
        Int32 selectedRowCount =
            dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected);
        if (selectedRowCount > 0)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
    
            for (int i = 0; i < selectedRowCount; i++)
            {
                sb.Append("Row: ");
                sb.Append(dataGridView1.SelectedRows[i].Index.ToString());
                sb.Append(Environment.NewLine);
            }
    
            sb.Append("Total: " + selectedRowCount.ToString());
            MessageBox.Show(sb.ToString(), "Selected Rows");
        }
    }
    
    Private Sub selectedRowsButton_Click( _
        ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles selectedRowsButton.Click
    
        Dim selectedRowCount As Integer = _
            dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected)
    
        If selectedRowCount > 0 Then
    
            Dim sb As New System.Text.StringBuilder()
    
            Dim i As Integer
            For i = 0 To selectedRowCount - 1
    
                sb.Append("Row: ")
                sb.Append(dataGridView1.SelectedRows(i).Index.ToString())
                sb.Append(Environment.NewLine)
    
            Next i
    
            sb.Append("Total: " + selectedRowCount.ToString())
            MessageBox.Show(sb.ToString(), "Selected Rows")
    
        End If
    
    End Sub
    

Para obtener las columnas seleccionadas en un control DataGridView

  • Utilice la propiedad SelectedColumns. Para permitir que los usuarios seleccionen columnas, debe establecer la propiedad SelectionMode en FullColumnSelect o en ColumnHeaderSelect.

    private void selectedColumnsButton_Click(object sender, System.EventArgs e)
    {
        Int32 selectedColumnCount = dataGridView1.Columns
            .GetColumnCount(DataGridViewElementStates.Selected);
        if (selectedColumnCount > 0)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
    
            for (int i = 0; i < selectedColumnCount; i++)
            {
                sb.Append("Column: ");
                sb.Append(dataGridView1.SelectedColumns[i].Index
                    .ToString());
                sb.Append(Environment.NewLine);
            }
    
            sb.Append("Total: " + selectedColumnCount.ToString());
            MessageBox.Show(sb.ToString(), "Selected Columns");
        }
    }
    
    Private Sub selectedColumnsButton_Click( _
        ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles selectedColumnsButton.Click
    
        Dim selectedColumnCount As Integer = dataGridView1.Columns _
            .GetColumnCount(DataGridViewElementStates.Selected)
    
        If selectedColumnCount > 0 Then
    
            Dim sb As New System.Text.StringBuilder()
    
            Dim i As Integer
            For i = 0 To selectedColumnCount - 1
    
                sb.Append("Column: ")
                sb.Append(dataGridView1.SelectedColumns(i).Index.ToString())
                sb.Append(Environment.NewLine)
    
            Next i
    
            sb.Append("Total: " + selectedColumnCount.ToString())
            MessageBox.Show(sb.ToString(), "Selected Columns")
    
        End If
    
    End Sub
    

Compilar el código

Para este ejemplo se necesita:

Programación sólida

Las colecciones descritas en este tema no funcionan eficazmente cuando se seleccionan grandes cantidades de celdas, filas o columnas. Para obtener más información sobre cómo usar estas colecciones con grandes cantidades de datos, vea Procedimientos recomendados para escalar el control DataGridView de Windows Forms.

Consulte también