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 :

Pb DataGrib et Champs


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut Pb DataGrib et Champs
    Bonjour,

    J'ai un énorme soucis que je ne sais résoudre, je liste les champs d'une table que je veux ajouter dans mon DataGrid.
    Pour cela j'utilise la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGrid.Rows.Add(maRow("NomChp1"), maRow("NomChp2"), maRow("NomChp3"), maRow("NomChp4"))
    Lorsque j'essaie avec le nom de mes champs en dur cela fonctionne sans problème mais voilà lorsque je liste tous mes noms de champs de ma table et que j'essaie avec la fonction ci-dessus d'ajouter les valeurs qui sont attribuées à chaque champs ça ne fonctionne pas.

    Je sais qu'en Windev il existe la fonction {"maRow("} + NomChp1 + {")"} ce qui fonctionne bien puisque cela reprend l'écriture de maRow("NomChp1") mais en VB.Net je colle.

    Bon je pense que j'ai embrouillé tout le monde donc je vais vous mettre le code que j'ai fait peut-être que cela sera plus compréhensible :

    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
    Dim maRow As DataRow
     
    For u = 0 To 30
        test = test & "maRow(" & Me.DataGrid.Columns(u).Name & "'),"
        System.Windows.Forms.Application.DoEvents()
    Next
     
    For Each maRow In DataSet.Tables(Me.CMB_TABLE.Text).Rows
     
         'Mon problème
         Me.DataGrid.Rows.Add(Microsoft.VisualBasic.Left(test, Microsoft.VisualBasic.Len(test) - 1))
     
         'Cela fonctionne puisque les champs ainsi que l'objet maRow est saisie en dur
         'Me.DataGrid.Rows.Add(maRow("ID"), maRow("ID_COULEE"), maRow("NATURE_PRODUIT"), maRow("DATE_COULEE"))
     
          System.Windows.Forms.Application.DoEvents()
    Next
    J'espère que vous pourrez m'aider dans ce problème qui malheureusement m'empêche d'aller plus loin.

    Merci d'avance à tous.

    Jb_One73

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je comprends rien à ta façon de faire... pourquoi tu mets pas simplement ta DataTable en DataSource du DataGridView ?

    Et au fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         'Mon problème
         Me.DataGrid.Rows.Add(Microsoft.VisualBasic.Left(test, Microsoft.VisualBasic.Len(test) - 1))
     
         'Cela fonctionne puisque les champs ainsi que l'objet maRow est saisie en dur
         'Me.DataGrid.Rows.Add(maRow("ID"), maRow("ID_COULEE"), maRow("NATURE_PRODUIT"), maRow("DATE_COULEE"))
    Cette ligne de code n'est pas du tout équivalente à la ligne en commentaire, c'est comme si tu faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGrid.Rows.Add("maRow(ID'), maRow(ID_COULEE'), maRow(NATURE_PRODUIT'), maRow(DATE_COULEE')")
    Donc pour lui c'est juste une chaine de caractères, il n'a aucune raison d'interpréter ça comme une liste de valeurs...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Mince !!!

    Enfaite je viens de m'apercevoir que ce que j'ai dit c'était pas tout à fait mon problème (j'ai pas fait attention à ce que j'ai écrit).

    Lorsque j'ai marqué :
    J'ai un énorme soucis que je ne sais résoudre, je liste les champs d'une table que je veux ajouter dans mon DataGrid.
    Pour cela j'utilise la commande :
    Enfaite, pour l'ajout de mes entités dans les colonnes je n'ai aucun soucis en revanche c'est pour ajouter les valeurs à c'est différente colonne que je n'y arrive pas tout bêtement parce que la fonction du DataGrid qui permet cela oblige ce que les nom de colonne soit tous renseigné et c'est ça que je n'arrive pas faire "Renseigné dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGrid.Rows.Add("maRow(ID'), maRow(ID_COULEE'), maRow(NATURE_PRODUIT'), maRow(DATE_COULEE')"
    le nom des colonnes"

    Je l'ai connait uniquement lorsque je fais la recherche des tables dans ma BDD.

    Pourquoi DataTable en DataSource du DataGridView ?
    C'est parce que c'est un pilote ADODC et que je ne sais pas comment faire donc j'utilise cette programmation après s'il y a une méthode je suis preneur.

    J'espère que cette fois ci j'ai été un peu plus compréhensible car expliquer ce que je fais c'est pour moi un peu compliqué.

    Merci pour ta réponse et merci pour ton aide.

    Jb_One73

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu n'as pas besoin de connaitre les noms des colonnes, il suffit d'ajouter une ligne en passant en paramètre un tableau d'objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGrid.Rows.Add(New Object() {uneValeur, uneAutreValeur...})

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Je viens de trouver la solution en revanche j'ai un méga soucis c'est que si j'ai dans ma table 15000 enregistrements je vais mettre environ 30mn pour tout afficher, là c'est vraiment un gros problème.

    Je te mets le code que j'ai fait pour alimenter ma DataGrid.

    Mon code :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     'Chaîne de connexion à la BDD
            Dim SqlConn As String = "Driver=Firebird/InterBase(r) driver;Server=localhost;" + _
            "Database=localhost:CheminBDD;Uid=SYSDBA;Pwd=masterkey;"
     
            'Outil de connexion à BDD
            Dim myDA As New Odbc.OdbcConnection(SqlConn)
     
            'Ouverture de la BDD
            Try
                myDA.Open()
            Catch ex As Exception
                MsgBox("Erreur de connection à la BDD !" + _
                Chr(13) + Chr(13) + "Détails :" + Chr(13) + ex.Message(), MsgBoxStyle.Critical, "Fluox")
                Exit Sub
            End Try
     
            Dim ReqSQL = "SELECT * FROM " & Me.CMB_TABLE.Text
     
            'Table de données en mémoire
            Dim adapter As New Odbc.OdbcDataAdapter(ReqSQL, myDA)
     
            'Création de l'objet Dataset :
            Dim DataSet As New DataSet
     
            Try
                'Chargement des données dans la table adapter
                adapter.Fill(DataSet, Me.CMB_TABLE.Text)
     
                Me.DataGrid.DataSource = dt
     
            Catch ex As Exception
                MsgBox("Erreur de chargement des données !" + Chr(13) + Chr(13) + "Détails :" _
                + Chr(13) + ex.Message(), MsgBoxStyle.Critical, "Fluox")
                Exit Sub
            End Try
     
        End Sub

    Pourrais tu m'aider sur ce nouveau problème.

    Merci d'avance.

    Merci d'avance à tous.
    Jb_One73

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    c'est le adapter.Fill qui prend du temps je suppose ?
    dans ce cas il n'y a pas grand chose à y faire je pense...
    tout ce que tu pourrais faire éventuellement c'est afficher des résultats partiels en fonction de critères de recherche

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    tomlev,

    Je viens de vérifier si le problème était lié , la réponse ou du moins le délai est d'environ 2s donc infime en revanche c'est au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGrid.DataSource = dt
    que vient le problème.

    J'ai un message pour voir lequel me prenait énormément de temps et c'est le datasource du datagrid.

    Est-ce que cette piste peut éclairer car là je piétine ? une petite question est-ce que le driver interbase peut en être la cause ?

    Merci.

    Jn_One73

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Jb_One73 Voir le message
    Est-ce que cette piste peut éclairer car là je piétine ? une petite question est-ce que le driver interbase peut en être la cause ?
    A priori ce n'est pas le driver qui pose problème : l'accès à la base se fait lors du Fill, et c'est visiblement très rapide.

    Je pense que c'est surtout un problème lié au datagridview qui a du mal à afficher autant de lignes...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Ok !

    Y'a t'il un remède ou un autre outils qui me permettrait d'afficher mes données ?

    Merci

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    tu pourrais surtout essayer de paginer les données... c'est pas très pratique pour l'utilisateur de se promener dans une grille de 15000 lignes !

    EDIT: j'y pense tout d'un coup, essaie d'ajouter un SuspendLayout et un ResumeLayout dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.DataGrid.SuspendLayout()
    Me.DataGrid.DataSource = dt
    Me.DataGrid.ResumeLayout()
    Je garantis pas que ça va régler le problème, mais ça coute rien d'essayer...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    C'est à dire ?

    Enfin je pense avoir compris mais bon. Sur ce que je comprend j'affiche env. 1000 enreg par exemple au lieu des 15 000.

    C'est ça ? si j'ai bien répondu j'aurai donc un soucis comment faire si l'utilisateur descend le scrollbar il va bien falloir que je lui affiche les données du 1001 au 2001 par exemple ?

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Jb_One73 Voir le message
    C'est à dire ?

    Enfin je pense avoir compris mais bon. Sur ce que je comprend j'affiche env. 1000 enreg par exemple au lieu des 15 000.

    C'est ça ? si j'ai bien répondu j'aurai donc un soucis comment faire si l'utilisateur descend le scrollbar il va bien falloir que je lui affiche les données du 1001 au 2001 par exemple ?
    oui c'est ça
    tu peux gérer l'évènement Scroll pour savoir quand il faut "changer de page"

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Ok super !

    Est-ce que tu connais par contre la requête qui permet par exemple de séléctionner les 100 premiers enregistrements tout en sachant que je ne connais pas le nom des champs donc en utilisant "*" ?

    Je sais qu'il existe la fonction TOP mais il faut lui affecter un champs et moi c'est pas possible.

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    ben ça dépend, c'est différent selon les SGBD... pour Interbase je sais pas
    Tu peux aller faire un tour sur le forum Interbase pour plus d'infos à ce sujet

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Ok merci pour tout tomlev, je vais maintenant exploiter cette voix qui est la plus approprié à mes besoins.

    En tout cas merci beaucoup pour ton aide.

    A bientôt.

    Jb_One73

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

Discussions similaires

  1. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 15h38
  2. [VB6] [Datareport] définir un champ
    Par ckankonvahou dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/10/2002, 12h16
  3. [ADO] Constantes des types de champ
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2002, 12h08
  4. Taille des champs proportionnelle...
    Par Depteam1 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/08/2002, 12h48
  5. taille max du nom d'un champ
    Par hna dans le forum Paradox
    Réponses: 2
    Dernier message: 28/07/2002, 03h40

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