XtraGrid 在更新其数据源后不刷新

Posted

技术标签:

【中文标题】XtraGrid 在更新其数据源后不刷新【英文标题】:XtraGrid not refreshing after updates to its data source 【发布时间】:2012-04-01 16:33:15 【问题描述】:

我在 windows 窗体上有一个 XtraGrid 控件,绑定到如下对象集:

clientListBindingSource.DataSource = ObjectContext.Clients;

其中 ObjectContext 是一个普通的 EF 上下文。要编辑客户端,我将所选行的 Client 对象传递给我的编辑表单,并按如下方式保存更改:

var rows = mainView.GetSelectedRows();
var editClient = ((Client)mainView.GetRow(rows[0]));
var editForm = new ClientDetailForm
                    
                        EditClient = editClient
                    ;
var result = editForm.ShowDialog();
if (result == DialogResult.OK)

    ObjectContext.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
    clientGrid.RefreshDataSource();

我在编辑表单中所做的更改会保留在数据库中,但我尝试了几种方法来尝试更新网格,但它顽固地拒绝,直到我重新启动应用程序。我做错了什么?

【问题讨论】:

【参考方案1】:

我建议你试试这个

clientListBindingSource.ResetBindings(False);

应该刷新绑定源从而刷新网格

【讨论】:

【参考方案2】:

我发现一个调用

Grid.RefreshDataSource();

如果您通过如下代码绑定 DataSource,则可以按预期工作:

IndicationSummaryGrid.DataBindings.Add("DataSource", Presenter, "SummaryDetailList", true, DataSourceUpdateMode.OnPropertyChanged);

其中“DataSource”是要绑定的网格属性,Presenter 是要绑定的对象,SummaryDetailList 是属于 Presenter 的对象列表。

【讨论】:

在我们的一个项目中,这不起作用(它是一个带有子列的网格。AddRemove 通常可以工作,除了 - 用户单击要排序的东西 - 之后 gridview 没有进一步更新......)【参考方案3】:

在进行如下更改后尝试重置您的数据源:

yourGrid.DataSource = null; // you might not need this, but it's my practice
yourGrid.DataSource = data_source;

【讨论】:

这行得通,谢谢,但对我来说有点脑死,包括RefreshDataSource 方法在内的任何其他方法都行不通。 DevExpress 控件似乎有点落后于 ED 数据源。 在我看来,gridview 除了显示数据之外什么也不做。程序员应该告诉它数据源已更改,以便它可以重新显示数据。不知道DevExpress有没有这个功能,还是手动做吧。

以上是关于XtraGrid 在更新其数据源后不刷新的主要内容,如果未能解决你的问题,请参考以下文章

XtraGrid的若干种用法

提交事务后不刷新数据C#

编辑后不刷新 ALV。为啥?

jqgrid有没有增删改后不刷新表格,而由自己手动刷新的方法?

页面提交后不刷新

vue 改变数据后,数据变化页面不刷新