2010-08-26 4 views
0

J'écris une application dans laquelle je charge deux DataGridViews à partir d'une base de données. J'ai réussi cela en utilisant un dataAdapter.Fill (DataSet), mais le problème que j'avais était que les données provenant de la base de données ont 10s de milliers d'enregistrements. C'est très lent (trop lent, environ 7 minutes) la première fois qu'il est couru. La prochaine fois qu'il fonctionne le temps est plus raisonnable (environ 35 secondes). Alors j'ai pensé que j'essaierais une autre approche: Charger un arraylists bidimensionnel avec les données puis le passer dans les datagridviews. À l'origine je pensais que ce serait un test rapide pour voir le gain de temps, le cas échéant, mais il s'est avéré être plus difficile que je pensais. Voici ce que j'ai:Problèmes lors du chargement d'un DataGridView avec une arrayList bidimensionnelle

while(dr.Read()) 
     { 



      for (int l = 0; b && l <= dr.FieldCount-1; l++) 
      { 
       DataGridViewColumn column = new DataGridViewColumn(); 
       column.CellTemplate = cellTemplate; 
       column.FillWeight = 1; 
       column.Name = dr.GetName(l); 
       dgv.Columns.Add(column); 
      } 
      b = false; 

      for (int i = 0; i <= dr.FieldCount - 1; i++) 
      { 
       row.Add(dr.GetValue(i)); 
      } 

      table.Add(row); 

      row = new System.Collections.ArrayList(); 
     } 

     dgv.DataSource = table; 

Remarque, je voudrais créer une classe pour construire dans les données (un membre de données pour chaque colonne, mais les colonnes pourrait changer) ainsi l'idée arrayList. Le datagridview finit par avoir les colonnes correctes, avec les noms corrects, et le ou les nombre (s) correct (s), cependant les lignes sont toutes vides et il a ajouté des colonnes supplémentaires relatives à la structure de arrayList. Qu'est-ce que je fais mal? Y a-t-il un meilleur moyen? Toute aide/rétroaction aurait apprécié! :-)

Merci,

Ben

Répondre

0

Ok ... je figure il out..sort de ;-) J'ai laissé tomber l'idée Arraylist et viens d'ajouter directement des valeurs dans le DGV. Voici ce que je l'ai fait, si quelqu'un se soucie :-)

... 
    while(dr.Read()) 
    { 
     for (int l = 0; b && l <= dr.FieldCount-1; l++) 
     { 
      DataGridViewColumn column = new DataGridViewColumn(); 
      column.CellTemplate = cellTemplate; 
      column.FillWeight = 1; 
      column.Name = dr.GetName(l); 
      dgv.Columns.Add(column); 
     } 
     b = false; 

     dgvRow = new DataGridViewRow(); 

     for (int i = 0; i <= dr.FieldCount - 1; i++) 
     { 

      dgvCell = new DataGridViewTextBoxCell(); 
      dgvCell.Value = dr.GetValue(i).ToString(); 
      dgvRow.Cells.Add(dgvCell); 
     } 

     dgv.Rows.Add(dgvRow); 
    } 
... 

Ce qui me conduit à ma question suivante: Best way to fill DataGridView with large amount of data

Questions connexes