Comment désactiver la surbrillance de cellule dans une vue de datagrid, la surbrillance ne devrait pas se produire même si je clique sur la cellule.
Toutes les pensées s'il vous plaît
Comment désactiver la surbrillance de cellule dans une vue de datagrid, la surbrillance ne devrait pas se produire même si je clique sur la cellule.
Toutes les pensées s'il vous plaît
Le kludge ForeColor / BackColor ne fonctionnait pas pour moi, car j'avais des cellules de couleurs différentes. Donc, pour toute personne au même endroit, j'ai trouvé une solution plus proche de la désactivation de la capacité.
Définissez l'événement SelectionChanged
pour appeler une méthode qui exécute ClearSelection
private void datagridview_SelectionChanged(object sender, EventArgs e)
{
this.datagridview.ClearSelection();
}
Le seul moyen que j'ai trouvé pour "désactiver" la mise en évidence est de définir le SelectionBackColor
et le SelectionForeColor
dans le DefaultCellStyle
sur le même que le BackColor
et ForeColor
, respectivement. Vous pourriez probablement le faire par programme sur l'événement Load
du formulaire, mais je l'ai également fait dans le concepteur.
Quelque chose comme ça:
Me.DataGridView1.DefaultCellStyle.SelectionBackColor = Me.DataGridView1.DefaultCellStyle.BackColor
Me.DataGridView1.DefaultCellStyle.SelectionForeColor = Me.DataGridView1.DefaultCellStyle.ForeColor
Fait une rapide recherche internet pour savoir comment faire un datagridview sélection non-sélectionnable et a du ce (page web) a frappé.
L'appel de ClearSelection sur SelectionChanged peut causer un double tir de l'événement SelectionChanged, au minimum.
Le premier cas est lorsque la cellule/ligne est sélectionnée et, bien sûr, la SelectionChanged événement est déclenché. La seconde cuisson est quand ClearSelection est appelé, car il provoque (et logiquement, donc!) la sélection de la datagridview (de nouveau) modifié (pas de sélection), déclenchant ainsi SelectionChanged.
Si vous avez plus de code que de simplement ClearSelection, comme tel, je n', vous aurez envie de supprimer cet événement jusqu'à ce que votre code est fait. Voici un exemple:
private void dgvMyControl_SelectionChanged(object sender, EventArgs e)
{
//suppresss the SelectionChanged event
this.dgvMyControl.SelectionChanged -= dgvMyControl_SelectionChanged;
//grab the selectedIndex, if needed, for use in your custom code
// do your custom code here
// finally, clear the selection & resume (reenable) the SelectionChanged event
this.dgvMyControl.ClearSelection();
this.dgvMyControl.SelectionChanged += dgvMyControl_SelectionChanged;
}
Le moyen le plus rapide pour faire cela pour traiter les cellules avec des couleurs différentes, sans avoir besoin de refire tous les événements, serait de faire quelque chose comme ceci:
private void dgvMyControl_SelectionChanged(object sender, EventArgs e)
{
dgvMyControl.SelectedCells(0).Style.DefaultCellStyle.SelectionBackColor = dgvMyControl.SelectedCells(0).Style.DefaultCellStyle.BackColor
}
(EDIT)
en fait, ce qui doit être fait à temps pour les données de population. il ne semble pas travailler dans le changement de la sélection de la méthode. Donc, après avoir rempli les données dans la table, vous avez besoin de parcourir les cellules et modifier leurs arrière-plan sélectionné pour correspondre à leur base normale. Quelque chose comme ceci (syntaxe peut être un peu hors, je suis de la conversion à partir de mon code vb):
foreach (datarow r in dgv.rows)
{
foreach (datacell c in r.cells)
{
c.Style.SelectionBackColor = c.Style.BackColor
}
}
Déconner et cela fonctionne aussi, car je veux seulement changer la couleur d'arrière-plan de la cellule dans la 2e colonne quand une cellule est cliquée:
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Dim row As Integer = DataGridView1.CurrentCellAddress.Y
Dim column As Integer = DataGridView1.CurrentCellAddress.X
If column = 1 Then
Me.DataGridView1.CurrentCell.Selected = False
DataGridView1.Item(column, row).Style.BackColor = SelectColour()
End If
End Sub
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.