2010-06-04 105 views
6

Tengo un datagridview en un formulario con algunos datos. La primera columna contiene un botón para eliminar la fila. ¿Cómo podemos deshabilitar este botón o toda la fila en función de alguna condición, por lo que la fila no se puede eliminar?Datagridview, deshabilitar botón/fila

+0

posible duplicado de [¿Cómo desactivo una celda de botón en WinForms DataGrid?] (Http://stackoverflow.com/questions/86096/how-do-i-disable-a-button-cell-in-a -winforms-datagrid) –

Respuesta

3

En realidad hay un HowTo en MSDN haciendo exactamente esto.

Editar: Se agregaron algunas otras sugerencias.

Puede hacer invisible la columna del botón.

O si solo desea deshabilitar la eliminación de ciertas filas, puede poner en verdadero o falso en cada propiedad DataGridViewRow s Tag y en su controlador de eventos de botón solo eliminará las que están configuradas como falsas. Podría combinar esto simplemente cambiando los colores de primer plano y de fondo de la celda para que parezca deshabilitada, esta coloración podría realizarse probablemente en el controlador de eventos CellFormatting o algo así para que no tenga que recorrerlo y colorearlo en a mano.

+0

Lo he visto antes, pero tiene que haber una forma mejor. – SoftwareGeek

+0

@BhejaFry: Bueno, mucho de ese código es para que se vea bien. Si no te importa eso, hay muchas otras maneras, agregaré un par de sugerencias a mi respuesta, ya que es más fácil leer allí. –

8

¿Consideraría simplemente convertir la celda del botón en un cuadro de texto vacío normal deshabilitado?

Dim cell As DataGridViewButtonCell = dgv.row(x).cell(y) 
cell = New DataGridViewTextBoxCell() 
cell.value = String.Empty 
cell.ReadOnly = True 

Pierde su apariencia bordeado "botón" y se mezcla con el resto de las células (suponiendo que está utilizando principalmente las DataGridViewTextBoxCells por defecto).

Aquí es el equivalente en C#, además de que se pone gris el campo para que se vea sólo lectura:

var cell = dgv[column, row] = new DataGridViewTextBoxCell(); 
cell.Value = ""; // ignored if this column is databound 
cell.ReadOnly = true; 
cell.Style.BackColor = Color.FromKnownColor(KnownColor.Control); 
3

Esta es una entrada antigua, pero me gustaría sugerir lo que hago.

If conditionToDisable Then 
    Dim cell As New DataGridViewTextBoxCell 'Replace the ButtonCell for a TextCell' 
    cell.Value = valueForCell     'Set the value again' 
    grid.Rows(r).Cells(c) = cell    'Override the cell' 
End If 

Espero que sea útil.

Cuestiones relacionadas