Bonjour,
Comme le titre l'induque, j'ai un problème avec un datagridview que je fais fonctionner en virtualmode.
Le datagridview est allimenté par une vue, et les données transmisent par une fonction qui est appelée sur l'évennement OnCellValueNeeded, qui ressemble à ça
Jusque là rien de bien méchant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 private void MonDGV_CellValueNeeded(object sender, System.Windows.Forms.DataGridViewCellValueEventArgs e) { e.Value=MaDataView[e.RowIndex][e.ColumnIndex]; }
Par contre, le problème arrive lorsque je raffraichit ma vue (ou la table qui l'alimente). Ma méthode de mise à jour des données ressemble à ça :
Et mon problème arrive sur la dernière ligne : J'ai à ce moment là un appel à MonDGV_CellValueNeeded qui se produit pour CHAQUE ligne du datagridview (et pas seulement pour les lignes visibles).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 private void MiseAJourDonnees() { //Je commence par "vider" le DataGridView, pour ne pas risquer d'avoir des accès à une ligne non présente dans ma nouvelle vue MonDGV.RowCount = 0; //définition des nouveaux filtres de ma vue... Je vous épargne les détails string Filtres = "Nom Like a%"; //J'applique les filtres sur la vue MaDataView.RowFilter = Filtres; //J'indique au datagridview le nouveau nombre de lignes MonDGV.RowCount = MaDataView.Count; }
Ce qui, bien sur, à tendance à être lent, voir très lent quand la view présente 5000 lignes (cas extrème pour les tests).
Et surtout, je perds tout l'avantage de l'utilisation du virtualmode!
J'ai essayé d'encadrer mon code avec des MonDGV.SuspendLayout() et MonDGV.ResumeLayout(), mais ça ne change rien... D'ailleurs, j'ai toujours pas compris dans quel cas ces fonctions servent à quelque chose!
Des idées ?
Partager