将项目添加到列表中后,刷新DevExpress.XtraGrid

Dej*_*ejo 2 c# binding devexpress xtragrid

我有一个List<SomeClass>绑定DevExpressXtraGrid像:

MyXtraGrid.DataSource = MyList;
Run Code Online (Sandbox Code Playgroud)

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

我尝试过MyXtraGrid.Refresh(),试图重新绑定MyXtraGrid.DataSource = MyList,但它没有用.

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

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

Ody*_*dys 9

只需这样做:

    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();
    }
Run Code Online (Sandbox Code Playgroud)

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

另请注意,List您可以使用BindingList<>以使网格自行更新,而无需编写单行代码.在这里阅读更多.