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 :

Structure Datagridview déformée après chargement données [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut Structure Datagridview déformée après chargement données
    Bonjour à tous,

    Je reviens vers vous car j'ai un problème lors d'une mise à jour des datagridviews. C'est extrêment lent .....

    Je lie mes datagridviews de cette manière :

    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
    Public Sub GetData(ByVal selectCommand As String)
     
                Call connection1()
                Dim connectionString1 As String = base1 & base3
     
                ' Create a new data adapter based on the specified query.
                Me.Table1dataAdapter = New OleDbDataAdapter(selectCommand, connectionString1)
     
                ' Create a command builder to generate SQL update, insert, and
                ' delete commands based on selectCommand. These are used to
                ' update the database.
                Dim commandBuilder1 As New OleDbCommandBuilder(Me.Table1dataAdapter)
     
                ' Populate a new data table and bind it to the BindingSource.
                'Dim table1 As New DataTable()
     
                table1.Locale = System.Globalization.CultureInfo.InvariantCulture
     
                Table1.Clear()
                Me.Table1dataAdapter.Fill(Table1)
                Me.Table1bindingSource.DataSource = table1
     
    end sub
    Au chargement de mon form principal, j'utilise la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetData("select * from Table1")
    Pour mettre mes datagridviews à jour par rapport à des BDD Access, j'utilisais la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.GetData(Me.Table1dataAdapter.SelectCommand.CommandText)
    Cette commande est trop longue .... Je me suis dis, pourquoi ne pas vider le datatable et recharger comme si je lançais l'application pour faire la MAJ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.Table1DataGridView.DataSource = vbNull
    Me.GetData(Me.Table1dataAdapter.SelectCommand.CommandText)
    De cette manière (pas trop géniale diront certains), cà va beaucoup mieux mais j'ai alors un BUG dans mon datagridview ....
    Ce dernier n'a plus le même format, mes colonnes masquées volontairement apparaissent, certaines colonnes que j'avais mis en gras ne le sont plus ......

    J'avoue que là je suis totalement perdu ..... Merci d'avance pour votre future aide

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Déconnecter/reconnecter le DataSource lors d'un update global est la bonne méthode.

    mes colonnes masquées volontairement apparaissent, certaines colonnes que j'avais mis en gras ne le sont plus ......
    C'est normal puisqu'on a un nouveau dataSource. Il faut donc stocker la liste des colonnes visibles (et éventuellement leur DisplayIndex).
    Pour les colonnes/cellules avec attributs de font ou de couleur, je préconise plutôt de gèrer leur mise en forme via l'event DataGridViewCellFormatting.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Salut Graffito,

    Merci pour ta réponse rapide

    Concernant les formats de mon tableau : colonnes visibles ou non, colonne en gras, etc ... je l'ai fait (étant débutant) pour tous mes tableaux (environ 7 dans différents onglets) en faisant clic-droit sur un datagridview puis "modifier les colonnes".

    J'ai du mal à saisir pourquoi mon tableau changerait de format alors que je recharge les données depuis les mêmes BDD.
    Et si je dois tout coder manuellement, cà va être galère pour moi. Il n'existe pas une commande pour lui dire de laisser les paramètres comme ils sont définis dans les propriétés de mes tableaux après le rechargement des données ?

    Edit : J'ai essayé comme ceci en fait, tout recharger pour mettre à jour les tableaux. Le temps est le même mais toujours les problèmes des tableaux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.Table1DataGridView.DataSource = vbNull
    GetData("select * from Table1")

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Re,

    Bon je continue à essayer de comprendre .... J'ai un autre tableau qui est aussi formaté avec des colonnes cachés, etc ...
    Pourquoi celui-ci ne change pas lorsque je recharge et 3 de mes 7 le font ?

    J'y comprend rien ...

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Bon ben je rame sec ....

    J'ai souvenir qu'on pouvait voir tout ce qu'on a placé avec la boite d'outils (boutons, tableaux, etc ....) en lignes de commandes.

    J'y était arrivé en cliquant par erreur ..... Peut-être un truc qui foire la dedans et qui sème la zizanie....

    Un autre truc avec ce tableau : Je définis la police par défaut des entêtes en arial, j'enregistre, je quitte VB et je le relance et la police est à nouveau en Microsoft ...... si celà peut-aider ....

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    je l'ai fait (étant débutant) pour tous mes tableaux (environ 7 dans différents onglets) en faisant clic-droit sur un datagridview puis "modifier les colonnes".
    J'espère que tu n'as pas multiplié le code en utilisant une fonction commune à l'ensemble des GridView.
    Recommendation aux débutants : dès que l'on a plusieurs instructions identiques dans différentes parties du code, il faut penser à les factoriser dans une fonction unique.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Salut Graffito,
    J'espère que tu n'as pas multiplié le code en utilisant une fonction commune à l'ensemble des GridView.
    Du fait de mon niveau en Vbnet, j'ai tout construit en utilisant la boite à outils puis en appliquant certains formats (gras, masqué, etc... ) via les propriétés mais pas par code. J'ai copié/collé les tableaux pour aller + vite. Mais chaque tableau a un nom différent par exemple et des propriétés différentes modifiés par les options disponibles, mais pas par code.

    Je n'ai crée aucune fonction pour construire les tableaux .... ou bien j'ai pas trop saisi ce que tu voulais me dire. Par contre il me semble qu'on peut voir un fichier ou est inscrit en code tout ce que l'on a ajouté avec la boite à outils dans notre application. C'est peut-être là que ce cache un truc qui fout le bordel.

    C'est comme ce truc que je t'ai dit. Je mets manuellement le format de mes headers en arial et gras via le panneau propriétés de mon datagridview, j'enregistre, je compile, j'exécute et tout est Ok. Je quitte Vbnet et le relance et recompile sans rien changer et il repasse en police microsoft Donc y a bien un truc qui fout le bordel quelque part.

    Merci de ta future réponse et de ta lumière car là je suis un peu dans les ténèbres....

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    c'est le problème qui arrive parfois en utilisant des asistants
    ca tape du code à ta place, que tu ne connais donc pas et qui interfère avec l'utilisation par code ...

    dans visual studio avant 2012 dans l'explorateur de solution cliquer sur le 2ème icone en haut, ca fait apparaitre les fichiers cachés
    sur le forms un + va apparaitre, dévoilant le fichier .designer.vb qui contient le code généré de l'interface
    sur vs 2012 ca doit etre le 2 ou 3 ème en partant de la droite

    tu pourras donc jeter un oeil sur le code généré pour la mise en forme

    malheureusement je ne peux pas aider plus, je n'utilise pas les assistants, et je remplis les datagrid de manière complexe

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Hello,

    Merci pour l'info j'ai trouvé ce fameux fichier. J'aurais une question sur les colonnes. Est-ce que la numérotation par des défaut des colonnes est propre à chaque tableau ? Par exemple column1, column 2, ... pour un premier datagrid. J'en crée un deuxième avec un autre nom, est ce que cela recommence à column1 ou bien çà continue la numérotation column3, etc ...

    Je pose cette question car j'ai par exemple ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Friend WithEvents Column94 As System.Windows.Forms.DataGridViewTextBoxColumn
        Friend WithEvents DataGridViewTextBoxColumn59 As System.Windows.Forms.DataGridViewTextBoxColumn
    La deuxième ligne est différente des autres ...

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    ce ne sont que des noms de variables générés automatiquement et non représentatifs
    le contenu d'une variable n'est jamais lié au nom qu'on lui donne

    en théorie ca recommence à 1 mais il ne faut pas trop se baser dessus

    si tu veux rester sur la souplesse des assistants, tu peux récupérer le code de mise en page pour mettre dans ton form et donc pouvoir l'appeler plusieurs fois
    ca reste moyennement pratique (à refaire à chaque modif) mais surement fonctionnel ...

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Re,

    bon j'ai cherché partout et pas trouvé pourquoi il me réinitialise 3 tableaux sur 7 lorsque je recharge les données......
    J'ai fait le test que tu m'a suggéré. J'ai copié de mon form.designer.vb tout ce qui se rapporte à un tableau défini dans le Private Sub InitializeComponent()
    et collé dans mon bouton rafraichir.... Le tableau est reconstruit ... mais j'ai une colonne qui se replace à un autre endroit par exemple. Alors que c'est du pur copier/coller.

    Trop bizzare tout cela. Merci pour vos futures suggestions

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Bonjour à tous,

    Bon j'ai donc créer un module que j'appelle pour reformater mes tableaux qui font la gueule. J'ai aussi réussi à régler le problème des index.

    Me reste un soucis auquel je n'arrive pas à résoudre. J'ai un Form1. Dans ce Form1, il y a un Tabcontrol1 avec comme propriété pour Anchor : Top, Bottom Left, Right.
    Dans ce Tabcontrol1, j'ai un Datagrid avec comme propriété pour Anchor : Top, Bottom Left, Right.

    Au lancement de l'application tout est nickel, le tableau s'étire sur toute la taille du Tabcontrol1.

    Et bien sûr lors du raffraichissement, mon tableau ne s'étire plus
    Pourtant lorsque j'ai recopié du .designer tout ce qui concerne ce tableau, il y a bien cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form1.Table1DataGridView.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
                Or System.Windows.Forms.AnchorStyles.Left) _
                Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
    Ais-je oublié quelque chose. Ou peut-être il manque une ligne de code pour lui dire de s'ancrer au Tabcontrol1 ?

    Merci d'avance

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    le datagrid doit s'étirer, mais après il faut que les colonnes s'étirent aussi
    pour ca il leur faut un width relatif plutot qu'absolu
    je n'ai plus en tete les propriétés, mais sur chaque colonne tu peux regarder les propriétés dispo

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Hello,

    Merci pour ta réponse. En fait, à la conception, j'ai étiré mon datagrid dans mon tabcontrol1, sur tous les côtés.
    Mon Form principal s'ouvre en plein écran. Comme mon tabcontrol1 est ancré au form1, il s'étire sur toute la fenêtre et mon datagrid aussi (étant lui même ancré sur le tabcontrol1.
    Ceci me permet d'avoir les barres de défilement du datagrid que lorsque le nombre de lignes du tableau sont supérieures à la taille de la fenêtre.
    Concernant la largeur du tableau, toutes les colonnes sont prédéfinis. J'ai opté pour ce choix car les PC utilisant ce programme n'ont pas les mêmes tailles et résolutions. Cela me permet de conserver un confort de lecture quelle que soit la taille. Sinon pour certains, ce serait trop petit.

    Au chargement de l'application, tout est nickel. C'est au rafraichissement que le tableau n'a plus l'air de s'ancrer au tabcontrol1 et donc de prendre toute sa place, même s'il y a moins de lignes et colonnes dans le tableau que la taille de la fenêtre. Et donc mon datagrid occupe par exemple en hauteur la moitié de la place qu'il devrait et de ce fait me rajoute + rapidement les barres latérales de défilement.....

  15. #15
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Bonjour,

    Vérifiez la propriété .Dock de votre DataGridView, il faut qu'elle soit à Fill pour que le contrôle s'ajuste automatiquement au contrôle parent.

    Que l'on me corrige si je me trompe, mais la propriété .Anchor désigne le point de positionnement d'un contrôle et non son comportement lors d'un redimensionnement.

    Bonne journée

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    bon j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.Table1DataGridView.Dock = DockStyle.Fill
    Là effectivement il remplit tout le Tabcontrol mais j'ai alors un autre petit soucis, c'est que j'ai d'abord au dessus du texte .... et dans le positionnement de mon Datagrid, j'ai normalement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.Table1DataGridView.Location = New System.Drawing.Point(6, 64)
    Mais avec la propriété fill, il ne tient plus compte de ce dernier paramètre

  18. #18
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Re,

    Bon j'ai mis un splitcontainer pour séparer le texte du tableau.Là la fonction fill du datagrid a l'air OK....

  19. #19
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Bonjour,

    Vous pouvez aussi utiliser un TableLayoutPanel si le comportement du SplitContenair ne vous convient pas.

  20. #20
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Hello,

    Merci pour la suggestion. Je vais encore un peu tester et si c'est ok, je mettrais ce topic comme résolu

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/03/2014, 17h30
  2. [WD18] Rafraîchir écran après chargement de données
    Par fdelepine dans le forum WinDev
    Réponses: 3
    Dernier message: 03/07/2013, 15h43
  3. Réponses: 15
    Dernier message: 28/10/2011, 15h45
  4. [PHPExcel] download fichier après chargement des données
    Par seurjer dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 11/10/2011, 13h43
  5. action APRES chargement complet ...
    Par PinGuy dans le forum Delphi
    Réponses: 7
    Dernier message: 06/07/2006, 17h16

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