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 : 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];
}
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 : 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;
}
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 ?