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 :

VB 2010 express => Datagridview et access


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 46
    Points : 24
    Points
    24
    Par défaut VB 2010 express => Datagridview et access
    Bonjour,

    Je suis nouveau sur le forum. Je passe de VB6 à VB 2010 express (oui oui, c'est un peu tard mais bon...) et j'ai quelques soucis avec le contrôle Datagridview.

    Je m'explique...

    J'ai ajouté une source de donnée à mon projet et j'ai les tables de ma bd qui apparaissent correctement dans le volet data sources de l'EDI. De là, je clic sur la table que je souhaite utiliser dans ma form et je fais un "drag n drop" sur ma form. Tout est généré automatiquement et je vois bien ma datagridview avec les infos de ma table.

    Le problème est que je souhaite réaliser un ajout de ligne par formulmaire au moyen de textbox et non pas par la grid en elle même. Là, tout se complique...

    1ère solution : j'ai réussis à ajouter le record à ma table avec un objet command et la méthode ExecuteNoQuery. Le problème est que ma grid ne se rafraichit pas et je dois quitter le programme et le relancer pour voir la modification. => non satisfaisant

    2ème solution : J'ai créé un DataTable et j'ajoute mon record avec maTable.Rows.Add(newpuce). Je place mon DataSource de la grid sur mon DataTable. Là, le record apparait dans ma grid mais le problème est que le contrôle BindingNavigator ne permet plus de se déplacer dans la grid (l'affichage ne suit plus dans la grid).

    3ème solution : Je crée toujours mon DataTable par contre je ne change pas le DataSource de ma grid et le laisse sur le contrôle BindingSource qui a été généré automatiquement. Par contre, au load, je place le DataSource de mon BindingSource sur mon DataTable. Là, j'ajoute toujours mon record avec maTable.Rows.Add(newpuce) et il apparait bien dans ma grid. Le BindingNavigator fonctionne lui aussi mais le problème est que la base de donnée n'est pas mise à jour. Je suppose que toutes les modifications sont effectuées sur le DataSet mais qu'il n'y a pas d'update.

    Voilà où j'en suis, j'ai beau chercher sur le net dans de la doc etc et aucune solution ne semble fonctionner...

    Le problème vient surement de moi, je dois faire un gros mix de tout ce que j'ai eu l'occasion de lire...

    Si quelqu'un aurait l'amabilité de m'éclairer un peu, je lui en serais très reconnaissant !

    D'avance merci,

    Bonne journée.

  2. #2
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Salut,

    As-tu fait un tour ici?

    Tu utilises l'assistant pour ajouter des données, c'est bien, mais si tu veux personnaliser, c'est plus difficile.
    Je te conseil de suivre le chapitre XVII-E du lien ci-dessus.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    il faut se renseigner et lire un minimum de cours sur les accès aux données en utilisant ado.net

    un cours intéressant ici

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par yonpo Voir le message
    Salut,

    As-tu fait un tour ici?

    Tu utilises l'assistant pour ajouter des données, c'est bien, mais si tu veux personnaliser, c'est plus difficile.
    Je te conseil de suivre le chapitre XVII-E du lien ci-dessus.
    Un grand merci, en effet, en y allant à l'ancienne ça fonctionne !

    Juste eu un petit soucis avec mon BindingNavigator et ma DataGridView en fait pour que cela fonctionne il faut rajouter un BindingSource et on fixe BindingSource1.DataSource = ObjetDataTable (pour utiliser les noms utilisés dans le tuto ci-dessus) et ensuite, fixer DataGridView1.DataSource = BindingSource1 et BindingNavigator1.BindingSource = BindingSource1.

    Voilà une réponse si jamais d'autres cherchent aussi le même problème.

    Merci pour vos réponses,

    Bonne journée

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    humm,

    J'ai un autre soucis, toujours en rapport avec ma DataGridView...

    J'aimerais que lorsque l'on clique sur une ligne de la grille des textbox affichent les valeurs des champs. J'arrive bien à me déplacer en avant / arrière/ début / fin grâce au BindingNavigator mais je cale pour gérer le clic dans la grille.

    A priori d'après la doc cfr plus haut, il n'existe pas d'enregistrement courant...
    Je suis un peu coincé là...

    Pour faire simple j'aimerais avoir le même comportement qu'en VB6 où je liais simplement ma textbox1.datasource à un contrôle adodc1 et ma textbox1.datamember à un champs de ma requête...

    C'est fou comme un truc super simple en vb6 me parait vachement tiré par les cheveux en .net

    D'avance merci

  6. #6
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Salut,

    Dans l'évènement CellClick du DataGridView, utilises:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridView.CurrentRow.Index
    Ainsi, tu récupères le numéro de la ligne sélectionnée et donc le numéro de la ligne sélectionnée dans ta datatable.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par yonpo Voir le message
    Salut,

    Dans l'évènement CellClick du DataGridView, utilises:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridView.CurrentRow.Index
    Ainsi, tu récupères le numéro de la ligne sélectionnée et donc le numéro de la ligne sélectionnée dans ta datatable.
    nickel ! merci, c'est tout de même plus propre que mon bricolage

    Autres questions...

    1) Est-il possible de bloquer la modification des champs par la DataGridView ? Ici, si je clic sur un champs, j'ai l'opportunité de le modifier et je voudrais bien bloquer cette fonction

    2) Dans mon BindingNavigator j'ai une TextBox qui indique un numéro d'enregistrement : ex : 5 de 263. "de 263" est un label mais le 5 est bien une TextBox et il est possible d'indiquer une valeur pour accéder directement à l'enregistrement souhaité. Le problème est qu'une fois que je fais enter, je change bien de ligne dans la grille mais je perds mon index de ligne :/ du coup l'affichage de mes textbox ne suivent plus Étant donné que c'est un contrôle ajouté automatiquement lors de l'ajout du BindingNavigator je n'arrive pas à mettre la main sur le code qui est derrière... une idée ?

    D'avance merci ! (super la réactivité sur ce forum !)

  8. #8
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    1) Lorsque tu clic sur la datagridview, il y a une une flèche en haut à droite du contrôle. Clic dessus. Tu as différentes options. Décoches celle qui qui t'intéresse.

    2)Je n'ai jamais utilisé le bindingNavigator, donc je ne peux pas te répondre.
    J'utilise des boutons (premier, précédent, suivant, dernier) et je code ce que font ces boutons.

    Par exemple pour le bouton premier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NumLigne= 0
    BindingContext(DataGridView.DataSource).Position = DataGridView.Rows(NumLigne).Index 'Ce code permet de déplacer le curseur noir sur la droite du contrôle
    Attention, il faut gérer le fait que tu soit déjà au premier enregistrement ou que le table soit vide.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    merci pour la modification, me semblait bien que j'avais déjà vus ces options mais je me souvenais plus où

    Pour la BindingNavigator je vais essayer de voir du côté de KeyPress sur la textbox, on sait jamais... j'indiquerai la résultat...

  10. #10
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Pourquoi ne récupères-tu pas le numéro saisi dans la textbox du bindingNavigator?

    Par défaut, le nom du textbox est: BindingNavigatorPositionItem

    Tu récupères le numéro saisi et tu le mets dans la variable "Numéro de Ligne"

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    Et bien voilà la solution en fait pour le BindingNavigator

    Je check le KeyDown pour vérifier si c'est enter (KeyValue = 13) ensuite si je regarde si je suis bien dans un index qui existe pour éviter une erreur et j'affiche mes textbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub BindingNavigatorPositionItem_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles BindingNavigatorPositionItem.KeyDown
            If e.KeyValue = 13 Then
                If BindingNavigatorPositionItem.Text - 1 >= 0 And BindingNavigatorPositionItem.Text - 1 <= ObjetDataTable.Rows.Count - 1 Then
                    RowNumber = BindingNavigatorPositionItem.Text - 1
                    TextBox5.Text = ObjetDataTable.Rows(RowNumber).Item("numero").ToString
                    TextBox6.Text = ObjetDataTable.Rows(RowNumber).Item("num_complet").ToString
                    TextBox7.Text = ObjetDataTable.Rows(RowNumber).Item("nom").ToString
                    TextBox8.Text = ObjetDataTable.Rows(RowNumber).Item("prenom").ToString
                End If
            End If
        End Sub

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par yonpo Voir le message
    Je pense qu'il y avait plus simple en récupérant le texte dans la textbox
    Bah, je dois quand même récupérer la valeur quand l'utilisateur fait enter donc je dois gérer le keydown et keyvalue. Ensuite vérifier que la valeur est un index valide et enfin updater mes textbox. Je ne vois pas trop comment faire plus simple/rapide mais ça m'intéresse si tu as une idée.

    En tout cas, merci pour l'aide et les infos

  13. #13
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Citation Envoyé par jojo1284 Voir le message
    Bah, je dois quand même récupérer la valeur quand l'utilisateur fait enter donc je dois gérer le keydown et keyvalue. Ensuite vérifier que la valeur est un index valide et enfin updater mes textbox. Je ne vois pas trop comment faire plus simple/rapide mais ça m'intéresse si tu as une idée.

    En tout cas, merci pour l'aide et les infos
    J'ai lu trop vite ton code. J'ai d'ailleurs supprimé mon poste.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [vb.net 2010] Datagridview + BD access => problème
    Par jojo1284 dans le forum VB.NET
    Réponses: 12
    Dernier message: 14/01/2011, 11h37
  2. SQL express 2005 fonctionne avec ACCESS 2003
    Par cbleas dans le forum Contribuez
    Réponses: 3
    Dernier message: 26/02/2007, 11h06
  3. [C# 2005 Express] Couleur DataGridView
    Par Leesox dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2006, 10h33
  4. Ouvrir Outlook Express dans un champs Access
    Par Badboy62cfp dans le forum Access
    Réponses: 1
    Dernier message: 07/06/2006, 13h32

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