J'ai un WinGroup DataGridView que lorsque je le peupler avec des données, le premier élément est sélectionné par défaut. Je ne veux pas que cela se produise quand un élément est sélectionné lorsqu'un événement se déclenche et que du code est exécuté. Les solutions que j'ai pour cela consistent à unhook-bind-rehook l'événement ou avoir un drapeau qui est changé la première fois que l'événement se déclenche après un nouveau databind. Cependant je me demandais s'il y a quelque chose d'un peu plus élégant.Empêcher un DataGridView de sélectionner le premier élément
Répondre
Je n'ai pas une application winforms ouverte à tester, mais je suis curieux de savoir si vous avez une BindingSource intermédiaire entre vos données et le datagridview? Si oui, si vous définissez
List<Data> data = GetMyData();
BindingSource myBindingSource = new BindingSource();
myBindingSource.DataSource = data;
myBindingSource.position = -1;
myGrid.DataSource = myBindingSource;
Je trouve souvent utile d'intervenir un objet BindingSource entre les données et l'interface utilisateur. Il semble aider à résoudre beaucoup de problèmes aléatoires, bien que je sois plus habitué à utiliser des objets DataTable comme des données plutôt que des objets List <>.
Utilisez quelque chose comme l'exemple suivant:
dataGridView.Columns[0].Selected = false;
dataGridView.Rows[0].Selected = false;
dataGridView.Rows[0].Cells[0].Selected = false;
Bien sûr, vérifier s'il y a des lignes, des colonnes, et ainsi de suite. C'est juste un exemple.
Qu'en est-(désolé, VB.NET mais je suis sûr que vous pouvez convertir):
myGrid.ClearSelection()
J'ai eu un problème similaire (mais je ne suis pas utiliser l'événement SelectionChanged), et cela fonctionne pour moi:
Dans le constructeur, après la liaison est définie, ajoutez un gestionnaire à l'événement DataBindingComplete:
dgvCommandos.DataSource = systeemCommandos; // = my List<> of objects
dgvCommandos.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dgvCommandos_DataBindingComplete);
le gestionnaire:
void dgvCommandos_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
dgvCommandos.ClearSelection();
}
Si vous avez l'intention de sélectionner une ligne (par ex. après l'ajout/l'insertion d'un nouvel objet), il suffit de définir:
dgvCommandos.Rows[insertPos].Selected = true;
En utilisant comme base, je pense qu'il est possible de gérer d'autres événements pour réagir lors de la sélection de l'utilisateur. J'espère que cela t'aides.
assez tard, mais la seule façon que je l'ai eu, je travaille pour moi (beaucoup de TextBoxes, ComboBoxes, etc. lié à mon DataGridView via BindingSource):
Après l'initialisation DataBindings à mes commandes et le chargement des données en DataGridView je devais suspendre la liaison
bindingSource.SuspendBinding();
Dans mon événement RowHeaderMouseClick j'ai vérifié si la liaison est suspendue. Si oui, juste reprendre:
if(bindingSource.IsBindingSuspended)
bindingSource.ResumeBinding();
De cette façon, je peux compléter le chargement et la liaison des données (dans mon cas un BindingList triables), afficher les données à l'utilisateur, mais sans enregistrement sélectionné.
Espérons que cela aide au moins n'importe qui!
- 1. Comment empêcher un DataGridView de sélectionner automatiquement une ligne?
- 2. Comment puis-je sélectionner le premier élément en utilisant XSLT?
- 3. Sélectionnez le premier élément d'une sélection
- 4. Insérer un nouvel élément à ListView après le premier élément
- 5. Comment empêcher le 'self' de glisser-déposer dans un datagridview?
- 6. Comment empêcher un combobox de sélectionner un élément de sa liste dans wpf?
- 7. JS/jQuery: Comment puis-je sélectionner le premier élément LI d'une navigation UL en survolant un autre élément LI (inférieur)?
- 8. Comment sélectionner le premier élément dans la liste déroulante à l'aide de jquery?
- 9. Aide jQuery - Comment sélectionner uniquement le premier élément d'un ensemble emballé?
- 10. Jquery wrapInner - excluant le premier élément
- 11. Comment obtenir le premier élément d'une chaîne?
- 12. Récupérer le premier élément d'une boucle For
- 13. Slide Toggle ouvre automatiquement le premier élément?
- 14. Comment sélectionner un élément dans l'arborescence Silverlight?
- 15. ListBox sélectionne toujours automatiquement le premier élément
- 16. Empêcher DataGridView de sélectionner une ligne lorsqu'elle est triée si aucune n'a été précédemment sélectionnée
- 17. Comment empêcher un DataGridView de partager des lignes?
- 18. Comment sélectionner un seul élément dans jQuery?
- 19. Listbox élément problème de premier plan
- 20. Tout sélectionner sauf le premier caractère d'une chaîne
- 21. Probabilité de sélectionner un élément dans un ensemble
- 22. Comment puis-je obtenir le premier élément après un élément avec LINQ-to-XML?
- 23. comment sélectionner un élément dans un espace de noms spécifique?
- 24. XPath: Comment sélectionner le premier parent donné d'un nœud?
- 25. Drupal: Sortie différente pour le premier élément d'un bloc
- 26. Comment lier au premier élément d'une ArrayCollection?
- 27. Comment trouver le premier élément masqué par JQuery
- 28. VIM: omnicomplete, autoselect premier élément dans la liste déroulante
- 29. Empêcher tabstop sur un élément (lien d'ancrage) en HTML
- 30. Comment sélectionner le nième élément dans xpath 1.0?
Ma source de liaison est une liste générique <> – jwarzech
Droite, mais vous pouvez toujours intervenir un objet BindingSource - donnez-moi une seconde et je vais mettre à jour la réponse avec ce que je veux dire – Clyde
Cela ne fonctionne pas. Définition de myBindingSource.Position = -1; 'et le relire immédiatement montre 0, pas -1; – styfle