首页 > 解决方案 > Infragistics UltraGrid 组更改事件

问题描述

我有一个 Infragistics UltraGrid,我需要知道用户何时添加/删除列分组。我看到当行折叠/展开时有事件,当网格的过滤器更改时有事件,但我没有看到在添加/删除列分组时会触发的任何事件。有谁知道此时会触发的 UltraGrid 事件?如果没有,是否有任何解决方法可以用来实现这一目标?

我已经尝试过使用 AfterBandHiddenChanged 和 AfterGroupPosChanged。这些似乎都没有做我需要的。

我正在使用 Infragistics 11.2 CLR2.0(我知道它已经过时了,但我不想更新它)

标签: eventsinfragisticsultrawingrid

解决方案


经过一番挖掘和试验,我找到了一种解决方法。这不是最漂亮的,但它完成了工作。如果有人有更好的建议,我会全力以赴。但这是我想出的,以防其他人感兴趣。

我利用网格BeforeSortChangedAfterSortChanged事件。“之前”事件设置一个标志以指示分组是否已更改。如果标志设置为指示分组已更改,则“之后”事件是我执行我需要执行的操作的地方。

这是“之前”事件:

private void Grid_BeforeSortChange(object sender, Infragistics.Win.UltraWinGrid.BeforeSortChangeEventArgs e) {
    int preSort = 0;
    int postSort = 0;

    // This set of sorted columns are the columns that were already sorted
    // before the sort change.
    foreach (var col in e.Band.SortedColumns) {
        if (col.IsGroupByColumn) {
            preSort++;
        }
    }

    // This set of sorted columns are the columns that will be
    // sorted after the sort change is applied
    foreach (var col in e.SortedColumns) {
        if (col.IsGroupByColumn) {
            postSort++;
        }
    }

    // Compare the number of grouped columns before the
    // sort to the number after the sort
    _groupingsChangedFlag = preSort != postSort
}

这是“之后”事件:

private void Grid_AfterSortChange(object sender, Infragistics.Win.UltraWinGrid.BandEventArgs e) {
    if (!_groupingsChangedFlag) {
        return;
    }
    // Groupings changed, so do some action
}

推荐阅读