Problème datagridview virtualmode
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
Code:
1 2 3 4
|
private void MonDGV_CellValueNeeded(object sender, System.Windows.Forms.DataGridViewCellValueEventArgs e) {
e.Value=MaDataView[e.RowIndex][e.ColumnIndex];
} |
Jusque là rien de bien méchant.
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 :
Code:
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;
} |
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).
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 ?