Bonjour,
une DataGridView est bindée à une DataSource via un BindingSource.
A la fin du chargement des données par la DataGridView je souhaite masquer certaines lignes, celles d'index pairs par exemple.
Mais pour la toute première ligne une exception est levée :
Une recherche sur Google donne une solution : suspendre le binding :InvalidOperationException : Row associated with the currency manager's position cannot be made invisible.
Mais cela ne change rien.
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 private void OnRowsAdded(object sender, EventArgs e) { CurrencyManager cm = (CurrencyManager)this.DataGridView.BindingContext[DataGridView.DataSource]; uint index = 0; foreach (DataGridViewRow row in this.DataGridView.Rows) { row.HeaderCell.Value = index.ToString(); if (index % 2 == 0) { cm.SuspendBinding(); row.Visible = false; cm.ResumeBinding(); } index++; } }
Google m'a aussi trouvé un hack qui est de mettre à null la propriété CurrentCell :
Ce hack fonctionne et donne le comportement attendu : pas d'exception et les bonnes lignes masquées.
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 OnRowsAdded(object sender, EventArgs e) { DataGridView.CurrentCell = null; uint index = 0; foreach (DataGridViewRow row in this.DataGridView.Rows) { row.HeaderCell.Value = index.ToString(); if (index % 2 == 0) { row.Visible = false; } index++; } }
Cela soulève plusieurs questions :
1) Pourquoi le problème se produit-il seulement pour la première ligne ?
2) Pourquoi dans ce cas suspendre le data binding ne fonctionne pas ?
3) Pourquoi le hack fonctionne ?
Merci d'avance.
Partager