Comment obtenir le courant rowindex d'un DataGridView?
Je veux que la ligne actuelle dans un DataGridView
. Pas par un clic de souris, mais en appuyant sur enter...
Je sais de ce:
datagridview.CurrentCell.RowIndex
et
datagridview.CurrentRow.Index
et
datagridview.SelectedRows[0].Index
...
Mon problème est que généralement cela fonctionne bien, sauf quand j'arrive à la dernière ligne. Parce qu'il obtient toujours l'indice de la dernière rangée.
Une idée de comment cela pourrait se produire? J'ai beaucoup cherché et je n'ai pas vraiment trouvé quelqu'un avec le même problème!!!!
- Pouvez-vous mettre un peu de code de votre projet/méthode/de l'événement qui vous renvoie ce mauvais indice?
- c'est la chose qu'elle représente aucun cas vraiment.. Lorsque j'appuie sur entrer, je veux montrer la ligne sélectionnée. Donc, puisque je ne peux pas obtenir par n'importe quel paramètre d'événement j'ai regarder qui datagridview est sélectionné comme je l'ai posté.
- Vous N'utilisez PAS le cas (par exemple KeyDown) ou vous ne POUVEZ PAS utiliser l'événement?
- oui, je veux dire-je utiliser un événement. Sens j'ai un win forms, et un datagrid view et puis j'ai un événement clé qui déclenche la chose ensemble, mais il n'y a pas d'information dans le cas des paramètres sur la ligne sélectionnée ou quoi que ce soit.
- Je pense que vous êtes débutant, alors laissez-moi vous expliquer, - VOUS avez BEAUCOUP D'INFORMATIONS DANS les ÉVÉNEMENTS de PARAMÈTRES!!! S'il vous plaît regardez "expéditeur" de l'objet en mode débogage juste après l'événement est déclenché.
- Que veut dire: Parce qu'il obtient toujours l'indice de la dernière rangée.?!
- veuillez fournir le code qui vous donne toujours la bonne ligne
- En fournissant votre code de l'événement KeyDown ou quelque soit l'événement que vous utilisez pour capturer la touche Entrée serait utile. Aussi - est-ce que votre grille d'exposer la nouvelle ligne de sorte que les utilisateurs peuvent ajouter une nouvelle ligne?
- Avez-vous peut-être ont AllowUserToAddRows = true, et continuez d'ajouter des lignes..?
- AllowUserToAddRows est faux!
- pourquoi la ligne sélectionnée d'un enfant datagridview être dans l'événement KeyPress de l'expéditeur d'un formulaire? Regardes l'objet expéditeur est la première chose que j'ai fait!
- Je reçois le même indice pour le dernier et l'avant-dernière rangée!
- Je l'ai fait il suffit de regarder ci-dessus. Il n'y a pas de plus et tout le monde sait comment un événement ressemble
- Pourriez-vous poster une vraiment simple code pour me montrer ce que tu veux dire par-je obtenir ce même indice pour le dernier et l'avant-dernière rangée! 🙂
- Vous vous rendez compte qu'en appuyant sur entrée par défaut passe à la ligne suivante, à droite?
- qui est en fait un bon point de exepté que l'indice est bon pour toutes les autres lignes. Pourquoi serait-ce juste être une erreur à la dernière ligne?
- Bien dans la dernière rangée, avec AllowUserToAddRows = lase il ne peut pas se déplacer. alors, qui sera certainement à l'origine des différents comportements. Mais ne voyant pas votre code, je ne peux pas dire pour sûr que ce serait la meilleure façon..
- Je ne sais pas vraiment quel est le code à fournir car il n'y a pas rien sauf ce que j'ai montré.
- Ainsi, l'événement que vous utilisez, bien sûr. Est-il pression sur une Touche, ou KeyDown ou quoi? Voici la façon dont je le manipuler:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyValue == 13) { e.Handled = true; Console.WriteLine(dataGridView1.CurrentRow + ""); }
- désolé! Le dernier commentaire que vous avez écrit, fait le tour! Merci! Si vous mettez comme une réponse à des Mauvais soumettre
Vous devez vous connecter pour publier un commentaire.
La capture de la ligne en cours dans un
DataGridView
est vraiment très simple et que vous avez posté deux voies qui fonctionnent très bien:ou:
La troisième on est effectivement plutôt problematatic car, selon la
SelectionMode
de laDataGridView
la ligne actuelle peut pas être sélectionné.Mais vos problèmes viennent en essayant de récupérer l'index dans la réponse à l'utilisateur de frapper le la touche Entrée.
Ce, par défaut, déplacer de la cellule d'une ligne vers le bas, si il y en a un. Ainsi, le comportement varie entre le dernier et l'autre les lignes..
Si il n'y a pas un 'suivant' ligne, de la cellule sera soit rester là où il est, ou, si
AllowUserToAddRows
est vrai, la DGV va créer une nouvelle ligne vide et s'y déplacer.Donc, si vous voulez toujours obtenir l'indice actuel, sans déplacement de la cellule en cours, vous devez empêcher le traitement de la touche Entrée.
Ici est une façon de le faire:
L'utilisateur pourra toujours se déplacer avec les touches de curseur.
Si DataGridView est configuré pour autoriser la ligne ajoute, de cellule en cours de sélection est un peu déroutant.
Disons qu'il y a un contrôle DataGridView avec 5 valide lignes de données, et l'utilisateur clique sur la ligne 5. Ensuite, l'utilisateur clique sur la ligne 6 et la nouvelle ligne est ajoutée à l'écran et la cellule sur la ligne 6 est mis en surbrillance.
Mais
CurrentCell.RowIndex
etCurrentRow.Index
rester ensemble pour la ligne 5 (valeur réelle=4), même si l'INTERFACE n'affiche plus le focus là.Cela n'a rien à faire avec la souris ou le clavier.
Je détecte ce cas, avec ce code: