2010-10-31 9 views
1

Considérez 2 DataGridViews avec SelectionMode = RowHeaderSelect. Dans grid1 j'ai 2 colonnes; un TextBox et un CheckBox. Dans grid2 j'ai 2 colonnes; un ComboBox et un TextBox.DataGridView UserDeletingRow non déclenché

Lorsque je clique sur le RowHeader, le focus va sur la première cellule, pas sur RowHeaderCell. Lorsque j'appuie sur le bouton DEL, le contenu de la cellule est supprimé (le contenu de TextBox est effacé et ComboBox est réglé sur le 1er élément). De cette façon, l'événement UserDeletingRow ne se déclenche jamais comme le dit la FAQ DataGridView "Les utilisateurs peuvent supprimer des lignes uniquement lorsque la cellule actuelle n'est pas en mode édition, la propriété AllowUserToDeleteRows est définie sur" true ".

Pour contourner ce problème, je mis en œuvre ce code dans RowHeaderMouseClick

grid.CurrentCell = grid.Rows[rowIndex].Cells[columnName]; 
grid.Rows[rowIndex].Selected = true; 

En cas de grid1 je passe le nom de la colonne de cases à cocher et l'événement se déclenche UserDeletingRow quand j'appuyez sur DEL. Cependant, pour grid2 passant le nom de la colonne ComboBox ne déclenche pas l'événement.

J'ai essayé ce qui suit:
1- Sélectionnez RowHeaderCell -> Exception car il ne peut pas être sélectionné.
2- grid.EndEdit() -> Aucun effet.
3- Changez le SelectionMode en FullRowSelect puis revenez à RowHeaderSelect -> Cell est en mode d'édition.

Ma question:
J'ai besoin de UserDeletingRow pour déclencher quelle que soit la colonne de la grille? Ou une solution de contournement pour sélectionner HeaderCell si possible?

Modifier (forme courte de la question):
En cliquant sur le RowHeader sélectionne la ligne et met la première cellule en mode édition, le cas échéant, de cette façon cliquant sur le bouton DEL efface le contenu de la cellule et ne se déclenche pas l'événement UserDeletingRow. Pour contourner le problème, je sélectionne une cellule, si disponible, qui ne peut pas être mise en mode édition, par ex. CheckBoxColumn.

Est-ce le comportement par défaut de cliquer sur le RowHeader? Si oui, pouvez-vous me montrer une solution de contournement? Si non pouvez-vous me signaler la cause de ce comportement?

Edit 2:
j'ai trouvé que la mise en EditMode à EditOnEnter fait en cliquant sur RowHeader mettre la première cellule en mode édition. Je vais essayer de surmonter cela, mais toute aide est appréciée.

Répondre

2

Dommage que je ne puisse pas encore laisser de commentaire (à cause des trucs de rep et ainsi de suite!) De plus, vous n'étiez pas clair sur ce que vous vouliez exactement faire. En cliquant sur le RowHeader de la ligne, la ligne entière est sélectionnée et en appuyant sur le bouton Del, la ligne est supprimée et l'événement est déclenché!

Si vous souhaitez pouvoir supprimer une ligne sans sélectionner l'en-tête de ligne, pensez à utiliser "Sélection de ligne complète" au lieu de "Sélection d'en-tête de ligne".

+0

En cliquant sur le RowHeader sélectionne la ligne entière mais met la première cellule en mode d'édition. C'est pourquoi appuyer sur DEL supprime le contenu de la cellule et ne déclenche pas l'événement UserDeletingRow. –

+1

Eh bien, j'ai essayé cela maintenant, il n'a pas mis ma première cellule en mode édition et je pourrais facilement supprimer cette ligne. Je me demande s'il existe une propriété pour ce comportement que vous mentionnez ... – M2X

+0

lorsque EditMode est défini sur EditOnEnter, le RowHeader place la première cellule en mode édition. C'est pourquoi DEL ne déclenche pas l'événement UserDeletingRow. –

Questions connexes