web-dev-qa-db-fra.com

La première colonne, première ligne, de DataGridView est sélectionnée lors du chargement, je ne veux pas de cela

Donc, fondamentalement, la toute première colonne de la première ligne est toujours sélectionnée, je ne peux pas trouver un moyen de l’avoir si la vue en grille n'a pas de cellules sélectionnées. De l'aide?

20
Spooks

J'ai eu le même problème et rien ne fonctionnait. La solution qui a fonctionné pour moi a été de définir la propriété "Tabstop" sur False et d'appeler la méthode ClearSelection () immédiatement après la liaison de données.

18
DaneAnthony

J'avais moi-même pas mal de problèmes avec ça. J'ai un contrôle utilisateur avec un DataGridView qui est rempli lors du chargement de l'application/du formulaire. La sélection de la première ligne semble se produire after la liaison de données est terminée et la grille est remplie/rendue. L'événement de chargement du contrôle utilisateur (et probablement aussi le chargement de formulaire) est déclenché avant cet événement. Par conséquent, l'appel de gridView.ClearSelection () ou l'annulation de gridView.CurrentCell dans ces événements de chargement n'a aucun effet net.

Ce qui a finalement fonctionné pour moi, c’était d’appeler .ClearSelection () à partir de l’événement DataBindingComplete du (DataGridView} lui-même. Cela a fonctionné comme un charme.

23
Dave Marley

Définissez la propriété CurrentCell du DGV sur null après la liaison de données avec le DGV: 

dataGridView1.CurrentCell = null; 

Notez que cela n'empêchera pas les événements DGV associés à la sélection de lignes et de cellules de se déclencher; vous devrez ajouter des contrôles sélectionnés du nombre de lignes ou de cellules aux événements RowEnter, comme suit:

private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) {
    if (dataGridView1.SelectedRows.Count == 1) {
        // Do stuff since a row is actually selected ...
    }
}
3
Jay Riggs

après que les données de liaison appelez

dataGridView.ClearSelection();

Je pense que vous avez essayé de l'appeler avant de définir les données dans dataGrindView, si jamais vous l'aviez déjà essayé

1
Minimihi

Vous devez appeler: ClearSelection after event: DataBindingComplete

1
user2272788

Je voulais également DataGridView en lecture seule et, dans mon cas, un thread séparé récupère lentement les données et les transmet au thread de l'interface graphique via une liste multi-thread et un minuteur. Dans cette approche, le thread d'interface graphique développe la grille de données selon les besoins tout en permettant la navigation.

Avec les suggestions ci-dessus, la sélection peut être masquée, mais aucune ne peut empêcher la cellule d'être réinitialisée lorsque mon thread d'interface graphique appelle dataGridView.Rows.Add () avec une sélection. Cela inclut les événements de raccordement pour empêcher la sélection et la désactivation du mode édition.

J'ai trouvé le comportement que je voulais avec

dataGridView.AllowUserToAddRows = false;

J'ai maintenant une grille de données de taille dynamique, chargée de manière asynchrone, qui est en lecture seule.

Je n’ai pas aimé la solution BackgroundWorker, car les progrès sont une lourde charge pour mon code de chargement. Je n’aimais pas non plus l’obligation de reconstruire un nouveau DataTable à chaque actualisation de la grille. Je n'ai trouvé aucun indice sur l'actualisation de DataGridView avec un DataTable en cours de construction, mais il semble que cela devrait être possible.

0
jws

SI je comprends le Q. Cela empêche une cellule d'afficher la sélection après la liaison des données. Ainsi, la couleur de fond reste blanche. Vous pouvez également modifier les colonnes et les définir à cet endroit.

DataGridView.DefaultCellStyle.SelectionBackColor = DataGridView.DefaultCellStyle.BackColor;
0
CW1255

Assurez-vous que vous n'appelez pas la méthode pour charger les données à partir du constructeur de formulaire. Si vous l'appelez de la forme.load ()

aussi après que le datagridview est chargé faire ceci

DataGridView.Rows[0].Selected = false;
0
Dennis Collins

La plupart du temps, cela est dû à une petite erreur, peut-être que datagridview est défini sur une zone de groupe. S'il y a plus de zones de groupe, la sélection s'arrête sur la première zone de groupe. Conservez-la donc par priorité.

0
gireesh mohan

J'ai eu le même problème dans mon cas, au lieu de définir la visibilité de la première ligne sur false. Il serait préférable de définir la valeur GridColor pour éviter tout risque sur SelectionChanged Event .

  1. Placez dgv.ClearSelection () sur DataBindingComplete Event et définissez GridColor sur votre DataGridView BackColor.

  2. Définissez GridColor sur Couleur visible (par exemple: Gris) dans votre méthode de remplissage/événement de déclenchement.

0
Robert Timothy