Je souhaite désélectionner toutes les lignes sélectionnées dans un contrôle DataGridView
lorsque l'utilisateur clique sur une partie vide (non-ligne) du contrôle.
Comment est-ce que je peux faire ceci?Comment désélectionner toutes les lignes sélectionnées dans un contrôle DataGridView?
Répondre
Pour désélectionner toutes les lignes et les cellules dans un DataGridView
, vous pouvez utiliser le ClearSelection
method:
myDataGridView.ClearSelection()
Si vous ne voulez même pas la première ligne/cellule à apparaître sélectionnée, vous pouvez régler la CurrentCell
property-Nothing
/null
qui masquera temporairement le rectangle de mise au point jusqu'à ce que le contrôle reçoit le focus nouveau:
myDataGridView.CurrentCell = Nothing
Pour déterminer quand l'utilisateur a cliqué sur une partie vide du DataGridView
, vous devrez gérer son événement MouseUp
. Dans ce cas, vous pouvez HitTest
l'emplacement du clic et regarder pour indiquer HitTestInfo.Nowhere
. Par exemple:
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
Bien sûr, vous pouvez également sous-classe le contrôle DataGridView
existant de combiner toutes ces fonctionnalités en un seul contrôle personnalisé. Vous devrez remplacer son OnMouseUp
method de la manière indiquée ci-dessus. Je tiens également à fournir une méthode publique DeselectAll
pour plus de commodité qui appelle la méthode ClearSelection
et définit la propriété CurrentCell
à Nothing
.
(exemples de code sont tous arbitrairement en VB.NET parce que la question ne précise pas une langue-excuses si ce n'est pas votre dialecte natif.)
Set
dgv.CurrentCell = null;
lorsque l'utilisateur clique sur une partie vide de la DGV.
Merci Cody Heres C# pour 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;
}
}
i ont couru dans le même problème et trouvé une solution (pas tout à fait par moi-même, mais il y a Internet pour)
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;
}
}
Ce petit truc, la seule façon de ca n voir qu'une ligne est sélectionnée, c'est par la toute première colonne (pas la colonne [0], mais l'une donc). Lorsque vous cliquez sur une autre ligne, vous ne verrez plus la sélection bleue, seule la flèche indique quelle ligne a été sélectionnée. Comme vous le comprenez, j'utilise rowSelection dans ma grille.
J'ai découvert pourquoi ma première ligne était sélectionnée par défaut et j'ai découvert comment ne pas la sélectionner par défaut.
Par défaut, mon datagridview était l'objet avec le premier tab-stop sur mon formulaire Windows. Faire la tabulation d'abord sur un autre objet (peut-être désactiver tabstop pour la grille de données du tout fonctionnera) désactivé la sélection de la première rangée
Cela a effectivement résolu mon problème aussi. Pour une raison étrange, changer la propriété 'TabStop' en' false' semble charger le formulaire sans une cellule/index 'DataGridView' sélectionné. – Apostrofix
Cela ne fonctionne pas. Si vous définissez un point d'arrêt sur l'événement SelectionChanged et activez .NET Framework Source Stepping, vous pouvez voir un appel de OnHandleCreated() à MakeFirstDisplayedCellCurrentCell(). C'est pourquoi cela arrive, pas parce qu'il peut être "tabulé". – computerGuyCJ
En VB.l'utilisation des moustiquaires pour la sous:
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
- 1. Comment désélectionner toutes les cellules d'un NSBrowser
- 2. Comment désactiver les colonnes sélectionnées dans un DataGrid en flex pour les lignes sélectionnées?
- 3. additionnant les valeurs sélectionnées de datagridview
- 4. sélectionner et désélectionner toutes les cases
- 5. Suppression de plusieurs lignes dans un datagridview non lié
- 6. C# Effacer les colonnes dans un datagridview supprime également toutes les lignes?
- 7. Comment extraire toutes les valeurs d'option (sélectionnées/non sélectionnées) dans une zone de sélection
- 8. Somme les lignes sélectionnées dans les données uniquement?
- 9. affichant toutes les lignes dans un calcul?
- 10. nombre de lignes sélectionnées dans toutes les pages de la grille devexpress
- 11. RichTextBox couleur lignes sélectionnées
- 12. Comment empêcher que toutes les lignes d'un NSTableView soient sélectionnées au démarrage
- 13. Opération ne peut être effectuée que sur les lignes appartenant à un contrôle DataGridView?
- 14. Suppression des bordures [sélectionnées] dans un contrôle DetailsView
- 15. Boucle dans les lignes de table sélectionnées avec JavaScript
- 16. Enregistrement de lignes sélectionnées dans un jqGrid pendant la pagination
- 17. Comment supprimer toutes les lignes correspondantes dans un seul tampon?
- 18. WPF: comment déplacer les lignes sélectionnées dans un DATAGRID au début de celui-ci?
- 19. Modifier toutes les lignes pour une colonne dans un GridView
- 20. Comment modifier des lignes dans DataGridView?
- 21. Pour chaque ligne dans les lignes sélectionnées (vb.net)
- 22. Retourne les colonnes sélectionnées sélectionnées
- 23. Comment récupérer les lignes sélectionnées d'une table en bois
- 24. Comment désélectionner un bouton radio?
- 25. Comment attraper toutes les exceptions dans un contrôle utilisateur
- 26. Problème lors de l'addition de cellules sélectionnées dans DataGridview
- 27. Les lignes DataGridView s'affichent mais aucune donnée
- 28. Comment empêcher un DataGridView de partager des lignes?
- 29. Comment désactiver la création de nouvelles lignes dans un DataGridView?
- 30. Ajout d'un contrôle dans Datagridview
Cela ne semble pas fonctionner pour moi, je l'ai, mais mon travail ne datagridview pas un '= HitTestInfo.Nowhere' je devais changer pour .... . 'Si myDataGridView.HitTest (eX, eY) est myDataGridView.HitTest (eX, eY) Then ... fonctionne comme prévu, mais pas à 100% pourquoi cela fonctionne. Premier code HitTest implémenté. – nora
@nora Le code que vous avez écrit n'a vraiment aucun sens. Ça n'aurait pas dû marcher. L'opérateur ['Is'] (https://msdn.microsoft.com/en-us/library/kb136x1y.aspx) compare les types de deux variables de référence. Tout ce que vous faites, c'est de vérifier que la propriété 'HitTest' renvoie une valeur du même type que la propriété ...' HitTest'. C'est comme dire "Si Vrai = Vrai". –
@nora (suite) En réalité, la propriété ['HitTest'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.hittest.aspx) renvoie une valeur de type 'HitTestInfo'. ['HitTestInfo'] (https://msdn.microsoft.com/fr-fr/library/system.windows.forms.datagridview.hittestinfo.aspx) est une classe non-héritable qui contient, entre autres, un champ statique nommé 'Nowhere'. C'est le domaine que vous devez comparer. Je suppose que ce qui vous trébuche est que la classe 'HitTestInfo' est une classe * nested * de' DataGridView'. J'ai mis à jour ma réponse pour la qualifier explicitement. –