IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Affichage de la selection datagridview dans les textbox


Sujet :

VB.NET

  1. #1
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut Affichage de la selection datagridview dans les textbox
    Bien le bonjour

    Dans mon petit programme , j'utilise un datagridview qui contient des enregistrements venant d'une DB

    Lorsque je change de ligne dans le datagridview avec les flèches haut et bas , je souhaite mettre a jour les textbox
    j'utilise donc datagridview_SelectionChanged avec un try catch car le datagridview n'est pas peuplé lors du chargement de la form
    Si je ne le met pas il provoque une erreur NULL.
    De plus lors du chargement je n'ai jamais l'affichage du détail du premier record dans les textbox. Il faut que je descende d'une ligne puis remonté
    J'ai déjà essayé qq astuce du genre sendkey down et up. Et si je n'ai qu'un seul enregistrement je ne vois rien

    Est-ce le bon évènement ou faut il prendre un autre ou est-ce la bonne méthode. Voici le bout de code.
    Ou je me trompe peut être totalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     Private Sub MonDatagridView_SelectionChanged(sender As Object, e As EventArgs) Handles MonDatagridView.SelectionChanged
    Try
     
    MonTexbox1.text= MonDatagridView.currentRow.cell("MonChamps1").Value.ToString
    MonTexbox2.text= MonDatagridView.currentRow.cell("MonChamps2").Value.ToString
     
     
    Catch
     
    End Try
     
    End Sub
    La Connaissance est comme la joie elle s'accroît en la partageant!

  2. #2
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Personnellement, j'utiliserais l'événement RowEnter du datagridview et plutôt que de faire appel à CurrentRow, j'utiliserais Rows(e.RowIndex).

    Après, si le datagridview est peuplé via une liste d'objet, tu peux faire du vrai databinding sur le contrôles. De sorte que ça affiche les données mais aussi, si l'utilisateur peut modifier le texte afficher, cela fait automatiquement l'assignation de la nouvelle valeur dans l'objet. Pas besoin de taper du code supplémentaire.

    Un petit exemple que j'ai codé ce matin dans un projet chez moi. Pour le contexte, il y a un contrôle de type NumericUpDown. Si la valeur qu'il contient n'est pas 0, je crée un nouvel objet de ma couche métier (NewDetails) qui contient une liste d'objets de ma couche DTO. Je crée objet de la couche DTO (pdd) et je l'ajoute à la liste de l'objet métier.
    Ensuite, il y a le binding sur 2 textbox (tbDesc et tbNote).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        Private Sub nudPercent_ValueChanged(sender As Object, e As EventArgs) Handles nudPercent.ValueChanged
            If nudPercent.Value = 0 Then
                tsbImportExc.Enabled = False
            Else
                'déclaration de l'objet métier
                NewDetails = New PROMO_BLL.PromoDetailsDemo 
                'déclaration de l'objet DTO
                Dim pdd As New PROMO_DTO.PromoDetailDemo(0, CurrentUser.DTO.BuyDept, "", "", nudPercent.Value, "", Step2.SelectedConcessions.DTO(0), PROMO_BLL.PercentType.GetById(frmStep3Demo.ActionType.List).DTO, True) 
                'ajout du dto dans l'objet métier
                NewDetails.DTO.Add(pdd) 
                'binding des propriétés Text des textboxes avec les propriétés Description et Note de mon objet DTO
                tbDesc.DataBindings.Clear()
                tbDesc.DataBindings.Add("Text", NewDetails.DTO(0), "Description")
                tbNote.DataBindings.Clear()
                tbNote.DataBindings.Add("Text", NewDetails.DTO(0), "Note")
            End If
        End Sub
    P-e n'as-tu pas besoin de ce genre de chose mais au moins, tu sauras que cela existe .

    EDIT : Tu n'as pas forcément besoin d'avoir de multiples niveaux d'abstraction comme c'est mon cas ici. Si tu as une classe (A) qui représente une ligne de ton datagridview, alors tu peux créer une liste de A et passer ta liste en datasource de ton datagridview. Sur base de cela, tu peux facilement récupérer l'instance de A associée à la ligne sélectionnée dans le datagridview et faire le binding avec les textboxes.
    Kropernic

  3. #3
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Hello,

    Déjà plutôt que d'utiliser un TryCatch (qui fera perdre un peu de temps), comme on peut prévoir l'erreur, alors faisons le test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If DataGridView1.SelectedCells.Count > 0 Then
     
     End If
    Au chargement de la form, tu peux sélectionner la première cellule... j'ai pas tester ça, mais essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If DataGridView1.Rows.Count > 0 Then
          Me.DataGridView1.Rows(0).Cells(0).Selected = True
     End If
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  4. #4
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    Bonjour

    le test if 'datagridview.rows.count>0 then' donne toujours l'erreur NULL référence

    Pour l'instant voici la seul solution qui fonctionne ( en attendant mieux..... )
    Je continue a chercher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      Try
                      If datagridview.rows.count> 1 Then Charge les données dans les contrôles textbox (CurrentRow.Index)
                      If datagridview.rows.count= 1 Then Charge les données dans les contrôles textbox (0)
                Catch
                End Try
    Cela ne donne pas d'erreur et affiche directement a l'ouverture de la form les données dans les contrôle

    Si d'autre méthode pour évité le try catch....

    Pour la solution de Kropernic , peut être correcte mais le databinding n'est pas ma tasse de thé ( peut être a défaut )
    La Connaissance est comme la joie elle s'accroît en la partageant!

Discussions similaires

  1. affichage des données d'un datagridview dans un textbox
    Par thierry007 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/09/2010, 22h36
  2. Correcteur d'orthographe dans les textbox
    Par Benawa dans le forum IHM
    Réponses: 1
    Dernier message: 30/08/2006, 20h52
  3. Problème d'affichage dans les textbox
    Par popinenhbourg dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/02/2006, 12h09
  4. Problème d'affichage dans les textbox
    Par popinenhbourg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 28/02/2006, 11h36
  5. Requête SELECT problème dans les résultats trouvés ...
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/10/2005, 12h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo