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

C# Discussion :

DataGridView Long à charger.


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut DataGridView Long à charger.
    Bonjour,

    Je développe une application en c#, j'ai fais ma chaîne de connections et ma requête qui doit afficher les données dans un DataGridView.
    Vu que j'ai beaucoup de ligne à afficher l'application met beaucoup de temps à se lancer .
    Est ce qu'il y a une solution pour afficher les données plus rapidement.


    Merci de votre aide

  2. #2
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Salut
    Non, ou alors en reduisant les donnees que tu affiches dans ton DataGrid.


  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Citation Envoyé par mrbrams Voir le message
    Bonjour,

    Je développe une application en c#, j'ai fais ma chaîne de connections et ma requête qui doit afficher les données dans un DataGridView.
    Vu que j'ai beaucoup de ligne à afficher l'application met beaucoup de temps à se lancer .
    Est ce qu'il y a une solution pour afficher les données plus rapidement.


    Merci de votre aide
    En même temps sans le code ça va être dur à dire, combien de ligne affiches-tu ?

    Après tu peux mesuré le temps que met ta requête à être éxécuté et le temps que met le datagridview à les charger avec la class StopWatch

  4. #4
    Membre actif
    Avatar de didate
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 90
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par mrbrams Voir le message
    Bonjour,

    Je développe une application en c#, j'ai fais ma chaîne de connections et ma requête qui doit afficher les données dans un DataGridView.
    Vu que j'ai beaucoup de ligne à afficher l'application met beaucoup de temps à se lancer .
    Est ce qu'il y a une solution pour afficher les données plus rapidement.


    Merci de votre aide


    Comme le dit @Seth77, tu peux pensé à mettre des filtres, oubien une datagridview paginable (datagridview personnalisé)
    L'effort fait les forts

  5. #5
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Bonjour,

    Alors il y a des astuces pour cela comme le Lazy loading, le but est de charger le Datagrid n lignes par n lignes de façon asynchrone.
    Par exemple tu remplit ton datagrid 100 lignes par 100 lignes dans un processus en arrière plan.
    Sinon comme l'a dit Seth, passer par de la pagination.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    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 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pour afficher beaucoup de données dans le datagridview msdn recommande de passer par le virtualmode
    c'est une propriété du même nom sur le datagridview, une fois activée ca passe dans un mode moins automatique
    un évènement est levé à chaque fois qu'une cellule est affichée, il faut donner la valeur de cette cellule
    donc toutes les lignes et colonnes n'existent pas réellement à un instant T, seules celles qui sont visibles, ce qui améliore grandement les performances (nous mettons des centaines de milliers de lignes ainsi)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    J'ai énormément de lignes et je peux pas les réduires.
    J'ai vu la solution virtualmode mais sur msdn c'est pas trop bien éxpliqué est ce que c'est possible de me donner plus de précision .
    Sinon la solution Lazy loading doit etre pas mal aussi mais est ce qu'il y a des exemples.

    Mercii

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    pour afficher beaucoup de données dans le datagridview msdn recommande de passer par le virtualmode
    c'est une propriété du même nom sur le datagridview, une fois activée ca passe dans un mode moins automatique
    un évènement est levé à chaque fois qu'une cellule est affichée, il faut donner la valeur de cette cellule
    donc toutes les lignes et colonnes n'existent pas réellement à un instant T, seules celles qui sont visibles, ce qui améliore grandement les performances (nous mettons des centaines de milliers de lignes ainsi)
    J'ai vu la solution virtualmode mais sur msdn c'est pas trop bien éxpliqué est ce que c'est possible de me donner plus de précision .

  9. #9
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par worm83 Voir le message
    Bonjour,

    Alors il y a des astuces pour cela comme le Lazy loading, le but est de charger le Datagrid n lignes par n lignes de façon asynchrone.
    Par exemple tu remplit ton datagrid 100 lignes par 100 lignes dans un processus en arrière plan.
    Sinon comme l'a dit Seth, passer par de la pagination.
    la solution Lazy loading doit etre pas mal aussi mais est ce qu'il y a des exemples.

  10. #10
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Le lazy loading va de paire avec le virtual mode, j'ai envie de dire.

    En ce qui concerne l'implémentation du Lazy, cela dépend de ton sgbd et de la façon dont tu y accède (orm, requête mano ect....), il faut que tu nous donne plus de précisions.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  11. #11
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par worm83 Voir le message
    Le lazy loading va de paire avec le virtual mode, j'ai envie de dire.

    En ce qui concerne l'implémentation du Lazy, cela dépend de ton sgbd et de la façon dont tu y accède (orm, requête mano ect....), il faut que tu nous donne plus de précisions.
    Je travaille sur une base de données Informix :

    Je vous donne le code pour accéder au serveur et a la base de donnée :

    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
       OdbcConnection con;
            OdbcDataAdapter adap;
            DataSet Ds;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
    
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                try
                {
                    con = new OdbcConnection();
                    con.ConnectionString = @"Dsn=***;Driver={SCO Vision ODBC};uid=***;Pwd=*******";
                    con.Open();
            
                   adap = new OdbcDataAdapter("MA REQUETE ", con);
                   
                    Ds = new System.Data.DataSet();
                    adap.Fill(Ds, "ibr");
                    dataGridView1.DataSource = Ds.Tables[0];
                }
                catch (Exception ex)
                {
                    MessageBox.Show("ERREUR\n" + ex.Message, "ERREUR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

  12. #12
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    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 154
    Points : 25 072
    Points
    25 072
    Par défaut
    virtualmode tel qu'on l'utilise:
    on créé les colonnes par code
    dgv.columns.Add
    on exécute la requete (en asynchrone mais ca peut se faire en synchrone peut etre)
    récupération des données dans <peu importe/datatable/collection/...>
    ajout des lignes en fonction du nombre de lignes retournées
    dgv.rows.add(nombre)
    pas besoin de préciser les données de la lignes, mais juste le nombre

    ensuite le dgv lève l'event cellvalueneeded à chaque fois qu'une cellule doit être dessinée à l'écran (donc quelques dizaines de fois au début et à chaque scroll)
    l'event fournit les coordonnées de la cellule, donc il suffit de chercher la valeur dans le stockage en ram pour lui donner
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    virtualmode tel qu'on l'utilise:
    on créé les colonnes par code
    dgv.columns.Add
    on exécute la requete (en asynchrone mais ca peut se faire en synchrone peut etre)
    récupération des données dans <peu importe/datatable/collection/...>
    ajout des lignes en fonction du nombre de lignes retournées
    dgv.rows.add(nombre)
    pas besoin de préciser les données de la lignes, mais juste le nombre

    ensuite le dgv lève l'event cellvalueneeded à chaque fois qu'une cellule doit être dessinée à l'écran (donc quelques dizaines de fois au début et à chaque scroll)
    l'event fournit les coordonnées de la cellule, donc il suffit de chercher la valeur dans le stockage en ram pour lui donner
    Chaud

  14. #14
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Et combien de lignes tu affiches ?

  15. #15
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par youtpout978 Voir le message
    Et combien de lignes tu affiches ?
    2000000

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    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 154
    Points : 25 072
    Points
    25 072
    Par défaut
    outre le problème du datagrid, tu dois avoir le temps de lecture des données depuis la base qui doit être de plusieurs secondes
    là aussi il y a des solutions, comme avec un datareader envoyer toutes les x lignes les infos au dgv
    le tout sur un autre thread
    mais là aussi ca demande des compétences et du code

    si tu n'as pas encore ce niveau là (car seul le virtualmode te permettra de mettre 2M lignes dans le dgv) il te faudra trouver autre chose qu'afficher tout, genre préfiltre (where)


    sinon certains vont te répondre que c'est inutile (voir idiot) de mettre autant de lignes dans un dgv, et c'est vrai que les cas où c'est utile ne sont pas fréquents (mais ca peut arriver)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    outre le problème du datagrid, tu dois avoir le temps de lecture des données depuis la base qui doit être de plusieurs secondes
    là aussi il y a des solutions, comme avec un datareader envoyer toutes les x lignes les infos au dgv
    le tout sur un autre thread
    mais là aussi ca demande des compétences et du code

    si tu n'as pas encore ce niveau là (car seul le virtualmode te permettra de mettre 2M lignes dans le dgv) il te faudra trouver autre chose qu'afficher tout, genre préfiltre (where)


    sinon certains vont te répondre que c'est inutile (voir idiot) de mettre autant de lignes dans un dgv, et c'est vrai que les cas où c'est utile ne sont pas fréquents (mais ca peut arriver)
    Salut,

    Dans mon Cas c'est utile j'ai trouvé deux solutions qui me semble intéressantes la première c'est de faire du pagging que j'ai testé sa marche bien . Mais la solution la plus interessante pour moi c'est le virtual mode que j'ai pas trouvé des précisions sur ce sujet

  18. #18
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    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 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu peux faire des tests, tu pose un dgv, tu mets virtualmode à true, dans le form_load tu ajoutes 2 colonnes et 5 lignes et dans l'event dgv.cellvallueneeded tu fais e.value == e.columnindex + " " + e.rowindex

    tu devrais mieux comprendre ce qui se passe
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  19. #19
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    tu peux faire des tests, tu pose un dgv, tu mets virtualmode à true, dans le form_load tu ajoutes 2 colonnes et 5 lignes et dans l'event dgv.cellvallueneeded tu fais e.value == e.columnindex + " " + e.rowindex

    tu devrais mieux comprendre ce qui se passe
    Sa me met une erreur

    Erreur 2 Seuls une assignation, un appel, un incrément, un décrément, une attente et des expressions d'objet new peuvent être utilisés comme instruction C:\Users\Utilisateur\Desktop\WFA_PDS\WFA_PDS\Form1.cs 95 13 WFA_PDS

  20. #20
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    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 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ce que j'ai écrit n'est pas forcément à copier coller, c'était un exemple, et je ne suis pas familier avec la syntaxe c#
    à toi de l'adapter donc

    sinon nous mettre le code que tu as tapé pour que quelqu'un le corrige
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Zend Server trop long à charger
    Par geeka dans le forum Zend Framework
    Réponses: 0
    Dernier message: 26/03/2015, 14h17
  2. PC sous Vista trop long à charger
    Par donny dans le forum Windows Vista
    Réponses: 5
    Dernier message: 16/09/2009, 14h14
  3. Datagridview long à charger
    Par eric062 dans le forum VB.NET
    Réponses: 24
    Dernier message: 19/11/2008, 09h28
  4. Site trop long à charger
    Par myspirou dans le forum IIS
    Réponses: 0
    Dernier message: 05/08/2008, 14h49
  5. DBLookupComboBox long à charger
    Par alex2003 dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/01/2008, 11h56

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