J'utilise Infragistics 2009 vol 1.Actualiser GroupBy Tri UltraGrid sur les bandes enfant lors de ListChanged?
Mon UltraGrid est lié à une BindingList d'objets métier "A" ayant eux-mêmes une propriété BindingList des objets métier "B". Il en résulte deux bandes: l'une nommée "BindingList`1", l'autre "ListOfB" grâce au gestionnaire de devises.
Je souhaite actualiser le type GroupBy de la grille chaque fois qu'une modification est effectuée sur la bande enfant via l'objet métier enfant et INotifyPropertyChange.
Si le groupe I par une propriété dans la bande de l'enfant qui est un booléen (disons « Actif ») et je souscris à l'événement ListChanged sur la source de données BindingList avec ce gestionnaire d'événements:
void Grid_ListChanged(object sender, ListChangedEventArgs e)
{
if (e.ListChangedType == ListChangedType.ItemChanged)
{
string columnKey = e.PropertyDescriptor.Name;
if (e.PropertyDescriptor.PropertyType.Name == "BindingList`1")
{
ultraGrid.DisplayLayout.Bands[columnKey].SortedColumns.RefreshSort(true);
}
else
{
UltraGridBand band = ultraGrid.DisplayLayout.Bands[0];
UltraGridColumn gc = band.Columns[columnKey];
if (gc.IsGroupByColumn || gc.SortIndicator != SortIndicator.None)
{
band.SortedColumns.RefreshSort(true);
}
ColumnFilter cf = band.ColumnFilters[columnKey];
if (cf.FilterConditions.Count > 0)
{
ultraGrid.DisplayLayout.RefreshFilters();
}
}
}
}
la bande .SortedColumns.RefreshSort (true) est appelée, mais il donne des résultats imprévisibles dans la région groupby lorsque la propriété active est modifiée dans la bande des enfants:
si un objet de trois actifs devient inactif, il va de:
- actifs: True (3 articles)
À:
- actifs: Faux (3 articles)
au lieu de (ce qui est le cas lorsque je fais glisser la colonne arrière et selon le groupe par zone)
actif: False (1 objet)
actifs: True (2 articles)
Ai-je fait quelque chose de mal?
Existe-t-il un moyen de restaurer l'état étendu des lignes lors de l'exécution d'un RefreshSort (true); ?