首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刷新UltraGrid在子带上的GroupBy排序何时ListChanged?

刷新UltraGrid在子带上的GroupBy排序何时ListChanged?
EN

Stack Overflow用户
提问于 2009-08-13 10:26:43
回答 2查看 7.1K关注 0票数 3

我使用的是2009年不脆弱学第1卷。

我的UltraGrid绑定到业务对象"A“的BindingList,其自身具有业务对象"B”的BindingList属性。它有两个波段:一个叫做“BindingList1”,另一个叫做"ListOfB“,这要归功于货币管理器。

每当通过子业务对象和GroupBy对子带执行更改时,我都会刷新网格的INotifyPropertyChange类型。

如果我根据子带中的一个属性进行分组,该属性是一个布尔值(假设为"Active"),并使用此事件处理程序订阅绑定列表数据源上的事件ListChanged:

代码语言:javascript
复制
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区域中提供不可预测的结果:

如果三个活动中有一个对象成为非活动对象,它将从:

  • Active : True (3项)

至:

  • Active : False (3项)

而不是(当我按区域将列来回拖到组中时就是这种情况)。

  • Active : False (1项)
  • Active: True (2项)

我做错了什么吗?

是否有方法在执行RefreshSort(True)时恢复行的展开状态?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-15 22:29:41

听起来像是个bug --你应该用不碎片整理来归档。

至于解决办法--这不是一个很好的解决方案,我还没有测试过它,但是您可以尝试将排序(组)列保存到临时存储区、带上的RefreshSort(),然后重新应用排序(gorup)列,然后重新排序?

即。移除分组,然后重新应用。

很恶心,但它可能会让你摆脱困境。

票数 0
EN

Stack Overflow用户

发布于 2013-08-05 07:53:48

好吧,我就是这样解决问题的

代码语言:javascript
复制
var ultraGridBand = this.ExperimentGrid.DisplayLayout.Bands[0];
            int nbGroup = ultraGridBand.Columns.All.Count(obj => ((UltraGridColumn) obj).IsGroupByColumn);
            //if (ultraGridBand.Columns.All.Any(obj => ((UltraGridColumn)obj).SortIndicator != SortIndicator.None)))
            if (nbGroup == 0)//no grouping
                ultraGridBand.SortedColumns.RefreshSort(true);
            else if (nbGroup > 0)
            {
                var expandedRows = new List<ExpandedRow>();
                var rowLevel1 = this.ExperimentGrid.DisplayLayout.Rows;
                ExtractExpandedRows(expandedRows, rowLevel1);
                ultraGridBand.SortedColumns.RefreshSort(true);
                SetExpandedRows(expandedRows, rowLevel1);
            }



    private static void SetExpandedRows(IEnumerable<ExpandedRow> expandedRows, RowsCollection rowLevel)
    {
        foreach (object obj in rowLevel.All)
        {
            var row = obj as UltraGridGroupByRow;
            if (row != null)
            {
                var expandedRow = expandedRows.FirstOrDefault(x => x.Value == row.ValueAsDisplayText);
                if (expandedRow != null)
                {
                    row.Expanded = expandedRow.IsExpanded;
                    SetExpandedRows(expandedRow.SubRows, row.Rows);
                }
            }
        }
    }

    private static void ExtractExpandedRows(ICollection<ExpandedRow> expandedRows, RowsCollection rowLevel)
    {
        foreach (object obj in rowLevel.All)
        {
            var row = obj as UltraGridGroupByRow;
            if(row != null)
            {
                var expandedRow = new ExpandedRow() { Value = row.ValueAsDisplayText, IsExpanded = row.Expanded };
                expandedRows.Add(expandedRow);
                ExtractExpandedRows(expandedRow.SubRows, row.Rows);
            }
        }
    }

这是包含信息的对象

代码语言:javascript
复制
class ExpandedRow
{
    public string Value { get; set; }
    public bool IsExpanded { get; set; }
    private readonly List<ExpandedRow> _subRows = new List<ExpandedRow>();
    public List<ExpandedRow> SubRows { get { return _subRows; } }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1271179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档