在将绑定到它的项目添加到列表后刷新DevExpress.XtraGrid

本文关键字:列表 刷新 添加 DevExpress XtraGrid 项目 绑定 | 更新日期: 2023-09-27 18:29:31

我有一个绑定到DevExpressXtraGrid的List<SomeClass>,类似于:

MyXtraGrid.DataSource = MyList;

我有一些列是用XtraGrid设计器制作的。一切都很好,行显示在网格中,但当我向MyList添加对象时,网格不会刷新,也不会显示新项目。

我试过使用MyXtraGrid.Refresh(),也试过重新绑定MyXtraGrid.DataSource = MyList,但都没用。

MyXtraGrix.MyView.PopulareColumns()不是一个选项,因为我不会在网格中显示MyList中的所有字段,这将导致我使用设计器配置的列。

如何刷新网格视图以显示我添加的对象?

在将绑定到它的项目添加到列表后刷新DevExpress.XtraGrid

只需执行以下操作:

    private void BindCollection(IEnumerable collection)
    {
        // keep current index
        GridView view = MyXtraGrid.Views[0] as GridView;
        int index = 0;
        int topVisibleIndex = 0;
        if (view != null)
        {
            index = view.FocusedRowHandle;
            topVisibleIndex = view.TopRowIndex;
        }
        MyXtraGrid.BeginUpdate();
        MyXtraGrid.DataSource = collection;
        MyXtraGrid.RefreshDataSource();
        if (view != null)
        {
            view.FocusedRowHandle = index;
            view.TopRowIndex = topVisibleIndex;
        }
        MyXtraGrid.EndUpdate();
    }

您还可以获取选定的行,并在设置新的数据源后重新选择它。

还需要注意的是,您可以使用BindingList<>来代替List,以便让网格更新自己,而无需编写一行代码。点击此处阅读更多信息。

使用GridControl.RefreshDataSource方法,就像我在收集数据时使用的那样。Source是某个类的列表,它包含另一个类的清单,用于创建主视图详细信息。

GridControl scheduleGrid = sender as GridControl;
MyXtraGrid.DataSource = collection;
scheduleGrid.RefreshDataSource();

如果您对IList(网格外)进行更改,我相信您则必须调用RefreshDatasource方法,并且IList不进行更改通知。RefreshDataSource方法

我认为如果你想继承IBindingList所有的一切都会自己融合在一起。否则我相信RefreshDatasource应该可以工作。

参考:
使用自定义枚举器时刷新网格
如何在刷新网格数据时保持滚动位置不变_
过滤对象数据源