none
(Visual Studio 2008) Saisie dans un DataGridView avec réaction immédiate RRS feed

  • Question

  • Bonjour,

    Pour une saisie de ligne de facture, j'ai un DataGridView à 4 colonnes

    Articles   Qte   Prix Unit    Montant

    La colonne QTE est en modification

    Quand l'utilisateur entre une quantité, je calcul le montant, QTE x PRIX, et je la mets dans la colonne MONTANT

    Je calcul aussi le total, somme de tous les montants, que j'affiche

    L'affichage de ce montant et de ce total se fait au moment où l'utilisateur click sur un autre contrôle, (ou s'il fait ENTER)

    Tant qu'il saisit des QTE, pas de problème. Les montants et le total apparaissent au fur et à mesure de sa saisie

    Mais une fois la saisie de la dernière QTE, l'utilisateur ne voit le montant de la ligne et le nouveau total que s'il faite ENTER ou click sur un contrôle

    Hors, il n'y a que deux boutons, VALIDER ou QUITTER, qui enchaine sur des traitements et passent sur une autre feuille

    Du coup, l'utilisateur accepte ou refuse sa saisie sans connaitre le montant total ….

    Bien sûr, je peux contourner ce problème en créant un arrêt avant de lancer les traitements, genre message d'acceptation

    Mais est-il possible de faire le calcul et l'affichage DES qu'un caractère est saisie ?

    Dans la pratique, dès que l'utilisateur entre 1 dans la quantité, le montant s'affiche

    S'il entre ensuite 0, (pour faire 10) tout s'actualise

    Si oui, comment faire ?

    Actuellement j'utilise l'événement " CellValueChanged"


    Cordialement SC

    mardi 18 juin 2013 07:39

Réponses

  • Bonjour,

    Merci pour votre réponse. Mais l'événement LEAVE n'est pas déclenché lors de la frappe

    J'ai trouvé une solution, sans savoir si c'est la meilleure

    J'avais le code suivant pour contrôler le numérique lors de la saisie

        Private Sub dgvRepasDinner_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvRepasDinner.EditingControlShowing
            Dim voControl As DataGridViewTextBoxEditingControl = Nothing
            voControl = CType(e.Control, DataGridViewTextBoxEditingControl)
            Select Case Me.dgvRepasDinner.Columns(dgvRepasDinner.CurrentCell.ColumnIndex).Name
                Case "QteDinner"
                    RemoveHandler voControl.KeyPress, AddressOf CheckCell
                    AddHandler voControl.KeyPress, AddressOf CheckCell
                Case Else
                    RemoveHandler voControl.KeyPress, AddressOf CheckCell
            End Select
        End Sub
        Private Sub CheckCell(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Dim KeyAscii As Short = Asc(e.KeyChar)
            If (KeyAscii < 48 Or KeyAscii > 57) And (KeyAscii <> 8) Then
                Beep() : Beep()
                e.Handled = True
                Exit Sub
            End If
       End Sub

    Dans cette procédure, CheckCell j'ai inclus le code qui fait le calcul et le remplissage

    Du coup, j'ai l'information des que l'utilisateur frappe un chiffre


     


    Cordialement SC

    mercredi 19 juin 2013 08:27

Toutes les réponses

  • Bonjour

    Vous pouvez utiliser l'évènement Leave du DataGridView.
    Pour récupérer la dernière ligne modifiée vous avez :

    dataGridView1.SelectedCells[0].RowIndex.ToString().


    Pour cette ligne vous devez recalculer le montant  et après  le Total.

    Cordialement, 


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.


    • Modifié Aurel Bera mercredi 19 juin 2013 07:19 HTML
    mercredi 19 juin 2013 07:19
  • Bonjour,

    Merci pour votre réponse. Mais l'événement LEAVE n'est pas déclenché lors de la frappe

    J'ai trouvé une solution, sans savoir si c'est la meilleure

    J'avais le code suivant pour contrôler le numérique lors de la saisie

        Private Sub dgvRepasDinner_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvRepasDinner.EditingControlShowing
            Dim voControl As DataGridViewTextBoxEditingControl = Nothing
            voControl = CType(e.Control, DataGridViewTextBoxEditingControl)
            Select Case Me.dgvRepasDinner.Columns(dgvRepasDinner.CurrentCell.ColumnIndex).Name
                Case "QteDinner"
                    RemoveHandler voControl.KeyPress, AddressOf CheckCell
                    AddHandler voControl.KeyPress, AddressOf CheckCell
                Case Else
                    RemoveHandler voControl.KeyPress, AddressOf CheckCell
            End Select
        End Sub
        Private Sub CheckCell(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Dim KeyAscii As Short = Asc(e.KeyChar)
            If (KeyAscii < 48 Or KeyAscii > 57) And (KeyAscii <> 8) Then
                Beep() : Beep()
                e.Handled = True
                Exit Sub
            End If
       End Sub

    Dans cette procédure, CheckCell j'ai inclus le code qui fait le calcul et le remplissage

    Du coup, j'ai l'information des que l'utilisateur frappe un chiffre


     


    Cordialement SC

    mercredi 19 juin 2013 08:27