7
votes

Datagridview.editmode = EditOnenter. Comment sélectionner la ligne pour la supprimer?

Lorsque j'utilise EditionMode = Edidonenter, la cellule Entrez sur EditionMode lorsque je sélectionne la ligne.

Il est difficile d'utiliser l'utilisateur de sélectionner le RowSelector pour supprimer la ligne.

Connaissez-vous un tour?


0 commentaires

4 Réponses :


1
votes

Vous devez comprendre que votre programme ne peut pas vraiment lire la pensée de l'utilisateur et comprendre lorsque vous entrez le mode édition, mais quand ne le faites pas.

L'utilisateur peut appuyer sur la touche d'échappement pour annuler le mode édition, puis la ligne peut être supprimée. Vous pouvez également choisir d'autres datagridVieweditmode (voir http: // msdn.microsoft.com/en-us/library/system.windows.forms.dataGridVieweditMode.aspx ), par exemple DataGridVieweditMode.editonkeystroke ou Editonkeystrokeorf2 qui sont tous deux bons du point de vue de la convivialité.


1 commentaires

Je connais tous les autres modes. Les utilisateurs veulent un mode Excel comme. J'utilise Editonenter uniquement sur le DGV usagé fréquent. Je sais comment supprimer une ligne, mais instruire chaque utilisateur sur ce comportement .... La touche ESC peut annuler la modification, mais sur ce mode, entrez en mode édition. Je ne comprends pas pourquoi la sélection du rownelector, Do'nt met fin en mode d'édition. Une solution consiste à déplacer le curseur vers une cellule non modifiable.



13
votes

J'essaie cette astuce:

Si l'utilisateur clique sur une en-tête de ligne, modifiez l'EDITMODE sur EDITONKEYSTRAKEORF2 CODE> et terminez l'édition. P>

Si l'utilisateur clique ailleurs , Modifiez l'EdiDmode en Edidonenter CODE> et commencez la modification. P>


Private Sub dgv2_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv2.CellClick
    If e.ColumnIndex = -1 Then
       dgv2.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
       dgv2.EndEdit()
    ElseIf dgv2.EditMode <> DataGridViewEditMode.EditOnEnter Then
       dgv2.EditMode = DataGridViewEditMode.EditOnEnter
       dgv2.BeginEdit(False)
    End If
End Sub


2 commentaires

C'était vraiment utile, j'ai combiné cela avec l'événement "CellprevieweyDown", permettant de laisser le mode d'édition de cellule en appuyant sur la touche ESC


J'ai également trouvé cela utile, mais s'il y avait une cellule déjà en mode édition, et j'ai sélectionné plus d'une ligne à supprimer, il a laissé l'une des lignes en mode édition, la suppression de ce que la suppression de ne pas fonctionnait. J'ai ensuite déplacé ce code dans l'événement CellMouseUp et cela a fonctionné à la façon dont je voulais. Merci pour cela!



0
votes

Cela doit vraiment être fait sur Mousedown. Cellule Cliquez sur les événements Incendie sur MouseUp:

Private Sub ProductsGrid_MouseDown(sender As Object, e As MouseEventArgs) Handles ProductsGrid.MouseDown
    Dim grid = DirectCast(sender, DataGridView)
    Dim info = grid.HitTest(e.X, e.Y)

    If into.Type = DataGridViewHitTestType.RowHeader OrElse info.Type = DataGridViewHitTestType.TopLeftHeader Then
        grid.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
        grid.EndEdit()
    ElseIf grid.EditMode <> DataGridViewEditMode.EditOnEnter Then
        grid.EditMode = DataGridViewEditMode.EditOnEnter
    End If
End Sub


0 commentaires

0
votes

Vous pouvez modifier l'accent sur la commande parent. Qui va forcer la cellule à mettre fin à l'édition sans avoir à changer le mode lui-même.

Par exemple, cet extrait laissera le mode d'édition si vous sélectionnez une autre cellule. P>

protected override void OnSelectionChanged(EventArgs e)
{
    base.OnSelectionChanged(e);

    if (SelectedCells.Count > 1)
    {
        // leave edit mode
        Parent?.Focus();
    }
}


0 commentaires