Infragistics 2009vol1を使用しています。
私のUltraGridは、ビジネスオブジェクト「B」のBindingListプロパティを持つビジネスオブジェクト「A」のBindingListにバインドされています。その結果、2つのバンドが作成されます。1つは「BindingList`1」という名前で、もう1つは通貨マネージャーのおかげで「ListOfB」という名前です。
子ビジネスオブジェクトとINotifyPropertyChangeを介して子バンドで変更が実行されるたびに、GroupByソートのグリッドを更新したいと思います。
ブール値(たとえば「アクティブ」)である子バンドのプロパティでグループ化し、このイベントハンドラーを使用してバインディングリストデータソースのイベント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)が呼び出されますが、子バンドでプロパティActiveが変更されると、groupby領域で予測できない結果が得られます。
3つのアクティブのうちの1つのオブジェクトが非アクティブになると、次のようになります。
- アクティブ:True(3アイテム)
に:
- アクティブ:False(3項目)
代わりに(これは、列をgroup byareaに前後にドラッグする場合です)
アクティブ:False(1アイテム)
アクティブ:True(2アイテム)
私は何か間違ったことをしていますか?
RefreshSort(true)を実行するときに、行の展開状態を復元する方法はありますか??