Я использую Infragistics 2009 vol 1.
Мой UltraGrid привязан к BindingList бизнес-объектов «A», имеющих свойство BindingList бизнес-объектов «B». В результате получается два бэнда: один с именем «BindingList`1», другой «ListOfB» благодаря менеджеру валюты.
Я хотел бы обновлять сортировку GroupBy сетки всякий раз, когда изменение выполняется в дочерней полосе через дочерний бизнес-объект и INotifyPropertyChange.
Если я группирую по свойству в дочерней полосе, которое является логическим (скажем, «Активный»), и я подписываюсь на событие ListChanged в источнике данных списка привязок с помощью этого обработчика событий:
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();
}
}
}
}
вызывается band.SortedColumns.RefreshSort(true), но он дает непредсказуемые результаты в области groupby, когда свойство Active изменяется в дочернем бэнде:
если один объект из трех активных становится неактивным, он уходит из:
- Активный : True (3 элемента)
To:
- Активный : Ложный (3 элемента)
Вместо (как в случае, когда я перетаскиваю столбец туда и обратно в группу по области)
Активный : Ложь (1 элемент)
Активный : True (2 элемента)
Я делаю что-то неправильно?
Есть ли способ восстановить расширенное состояние строк при выполнении RefreshSort(true); ?