.net - propiedades - ¿Cómo anular la selección de todas las filas seleccionadas en un control DataGridView?
propiedades de datagridview (6)
Quisiera anular la selección de todas las filas seleccionadas en un control DataGridView
cuando el usuario hace clic en una parte en blanco (sin fila) del control.
¿Cómo puedo hacer esto?
Conjunto
dgv.CurrentCell = null;
cuando el usuario hace clic en una parte en blanco del dgv.
En el uso de VB.net para el Sub:
Private Sub dgv_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgv.MouseUp
'' deselezionare se click su vuoto
If e.Button = MouseButtons.Left Then
'' Check the HitTest information for this click location
If Equals(dgv.HitTest(e.X, e.Y), DataGridView.HitTestInfo.Nowhere) Then
dgv.ClearSelection()
dgv.CurrentCell = Nothing
End If
End If
End Sub
Gracias Cody aquí está el c # para ref:
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
DataGridView.HitTestInfo hit = dgv_track.HitTest(e.X, e.Y);
if (hit.Type == DataGridViewHitTestType.None)
{
dgv_track.ClearSelection();
dgv_track.CurrentCell = null;
}
}
Para anular la selección de todas las filas y celdas en un DataGridView
, puede usar el método ClearSelection
:
myDataGridView.ClearSelection()
Si no desea que la primera fila / celda aparezca seleccionada, puede establecer la propiedad CurrentCell
en Nothing
/ null
, que ocultará temporalmente el rectángulo de foco hasta que el control reciba el foco nuevamente:
myDataGridView.CurrentCell = Nothing
Para determinar cuándo el usuario ha hecho clic en una parte en blanco de DataGridView
, tendrá que manejar su evento MouseUp
. En ese caso, puede HitTest
la ubicación del clic y HitTestInfo.Nowhere
esto indique HitTestInfo.Nowhere
. Por ejemplo:
Private Sub myDataGridView_MouseUp(ByVal sender as Object, ByVal e as System.Windows.Forms.MouseEventArgs)
''''# See if the left mouse button was clicked
If e.Button = MouseButtons.Left Then
''''# Check the HitTest information for this click location
If myDataGridView.HitTest(e.X, e.Y) = DataGridView.HitTestInfo.Nowhere Then
myDataGridView.ClearSelection()
myDataGridView.CurrentCell = Nothing
End If
End If
End Sub
Por supuesto, también podría crear una subclase del control DataGridView
existente para combinar todas estas funcionalidades en un solo control personalizado. Tendrá que anular su método OnMouseUp
similar al que se muestra arriba. También me gusta proporcionar un método público de DeselectAll
para mayor comodidad que llama al método ClearSelection
y establece la propiedad CurrentCell
en Nothing
.
(Las muestras de código están todas arbitrariamente en VB.NET porque la pregunta no especifica un lenguaje; disculpas si este no es su dialecto nativo).
descubrí por qué mi primera fila fue seleccionada por defecto y descubrí cómo no seleccionarla por defecto.
Por defecto, mi datagridview era el objeto con la primera pestaña-stop en mi formulario de Windows. Hacer que la pestaña se detenga primero en otro objeto (tal vez deshabilitar la función tabular para la cuadrícula de datos funcione) desactivada al seleccionar la primera fila
me encontré con el mismo problema y encontré una solución (no solo para mí, pero sí para internet)
Color blue = ColorTranslator.FromHtml("#CCFFFF");
Color red = ColorTranslator.FromHtml("#FFCCFF");
Color letters = Color.Black;
foreach (DataGridViewRow r in datagridIncome.Rows)
{
if (r.Cells[5].Value.ToString().Contains("1")) {
r.DefaultCellStyle.BackColor = blue;
r.DefaultCellStyle.SelectionBackColor = blue;
r.DefaultCellStyle.SelectionForeColor = letters;
}
else {
r.DefaultCellStyle.BackColor = red;
r.DefaultCellStyle.SelectionBackColor = red;
r.DefaultCellStyle.SelectionForeColor = letters;
}
}
Este es un pequeño truco, la única forma en que puede ver una fila seleccionada es en la primera columna (no en la columna [0], sino en la primera). Al hacer clic en otra fila, ya no verá la selección azul, solo la flecha indica qué fila ha seleccionado. Como comprenderás, utilizo rowSelection en mi vista de cuadrícula.