Je souhaite désélectionner toutes les lignes sélectionnées dans un fichier DataGridView
lorsque l'utilisateur clique sur une partie vide (sans ligne) du contrôle. Comment puis-je faire cela ?
Réponses
Trop de publicités?Pour désélectionner toutes les lignes et cellules d'un fichier DataGridView
vous pouvez utiliser le ClearSelection
méthode :
myDataGridView.ClearSelection()
Si vous ne voulez pas que la première ligne/cellule apparaisse sélectionnée, vous pouvez fixer le CurrentCell
propriété à Nothing
/ null
qui masquera temporairement le rectangle de focus jusqu'à ce que le contrôle reçoive à nouveau le focus :
myDataGridView.CurrentCell = Nothing
Pour déterminer si l'utilisateur a cliqué sur une partie vide de l'écran, il faut que l'utilisateur ait cliqué sur une partie vide de l'écran. DataGridView
vous allez devoir gérer son MouseUp
événement. Dans cet événement, vous pouvez HitTest
l'emplacement du clic et observez si cela indique 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) = HitTestInfo.Nowhere Then
myDataGridView.ClearSelection()
myDataGridView.CurrentCell = Nothing
End If
End If
End Sub
Bien sûr, vous pouvez également sous-classer l'existant DataGridView
pour combiner toutes ces fonctionnalités en un seul contrôle personnalisé. Vous devrez remplacer son OnMouseUp
méthode de la manière indiquée ci-dessus. J'aime aussi fournir une fonction publique DeselectAll
pour plus de commodité, qui appelle à la fois la ClearSelection
et définit la méthode CurrentCell
à la propriété Nothing
.
(Les échantillons de code sont tous arbitrairement en VB.NET car la question ne précise pas de langage - toutes nos excuses si ce n'est pas votre dialecte maternel).
J'ai trouvé pourquoi ma première ligne était sélectionnée par défaut et j'ai trouvé comment ne pas la sélectionner par défaut.
Par défaut, mon datagridview était l'objet avec le premier arrêt de tabulation sur mon formulaire Windows. En plaçant la tabulation en premier sur un autre objet (ou en désactivant la tabulation pour le tableau de données), la sélection de la première ligne est désactivée.
J'ai rencontré le même problème et j'ai trouvé une solution (pas totalement par moi-même, mais il y a l'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;
}
}
Il s'agit d'une petite astuce, la seule façon de voir qu'une ligne est sélectionnée, c'est par la toute première colonne (pas la colonne[0], mais la première 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 l'avez compris, j'utilise rowSelection dans mon gridview.