2008-09-16 9 views
12

Quiero deshabilitar la selección de ciertas filas en una vista de tabla de datos.Desactivar la selección de filas en una vista de tabla de datos

Debe ser posible eliminar la propiedad select para una o más filas de datagridview en una vista de cuadrícula de datos que se muestra en un formulario de win. El objetivo es que el usuario no pueda seleccionar ciertas filas. (Dependiendo de la condición)

Thankx,

+0

Para quienes encontraron esta pregunta para saber cómo desactivar la selección filas en absoluto: conjunto '' SelectionMode' propiedad a CellSelect' – Pavel

Respuesta

16

Si SelectionMode es FullRowSelect, a continuación, tendrá que anular SetSelectedRowCore para que DataGridView, y no llame a la SetSelectedRowCore de base para las filas que no desea que seleccionó.

Si SelectionMode no es FullRowSelect, querrá anular adicionalmente SetSelectedCellCore (y no llamar a la base SetSelectedCellCore para filas que no desea que se seleccionen), ya que SetSelectedRowCore solo se activará si hace clic en el encabezado de fila y no celda individual

He aquí un ejemplo:

public class MyDataGridView : DataGridView 
{ 
    protected override void SetSelectedRowCore(int rowIndex, bool selected) 
    { 
     if (selected && WantRowSelection(rowIndex)) 
     { 
      base.SetSelectedRowCore(rowIndex, selected); 
     } 
    } 

    protected virtual void SetSelectedCellCore(int columnIndex, int rowIndex, bool selected) 
    { 
     if (selected && WantRowSelection(rowIndex)) 
     { 
      base.SetSelectedRowCore(rowIndex, selected); 
      } 
    } 

    bool WantRowSelection(int rowIndex) 
    { 
     //return true if you want the row to be selectable, false otherwise 
    } 
} 

Si está utilizando Windows Forms, el crack abrir sus designer.cs de forma relevante, y cambiar la declaración de la instancia DataGridView a utilizar esta nueva clase en lugar de DataGridView, y también reemplaza this.blahblahblah = new System.Windows.Forms.DataGridView() para que apunte a la nueva clase.

+0

una solución que funciona ... Pero para esto creo que tenemos que crear una Clase que amplía el control datagridview ... ¿Tengo razón? ¿No tenemos una solución que funcione en la clase datagridview actual –

+0

Me gustaría preguntar si hay una función para resaltar solo cierta columna incluso si la fila está configurada como seleccionado – Nap

+0

@szevvy, ¿puedes explicarlo más? Necesito esta respuesta en este momento, también. – Sev09

-1
Private Sub dgvSomeDataGridView_SelectionChanged(sender As Object, e As System.EventArgs) Handles dgvSomeDataGridView.SelectionChanged 
     dgvSomeDataGridView.ClearSelection() 
End Sub 
Cuestiones relacionadas