6

我正在使用 Winforms DevExpress,并且正在将 DataTable 绑定到运行良好的 DataGridView。我遇到的问题是我有一些函数将构建一个新的 DataTable 对象,该对象与需要替换绑定到 DataGridView 的原始 DataTable 的原始对象分开。

DataTable originalTable = new DataTable("OriginalTable");

//Populate originalTable 

myDataGridControl.DataSource = originalTable;

上面的代码一切正常,但是下面的代码创建了一个新的 DataTable 并且需要设置为 myDataGridControl 的 DataSource。

DataTable newTable = new DataTable("NewTable");

//Populate newTable

//Set newTable as the DataSource for myDataGridControl
myDataGridControl.DataSource = newTable;

我尝试了几种不同的尝试来完成这项工作,例如调用 RefreshDataSource()、Refresh()、将 DataSource 设置为 null。我还没有让它工作。我该怎么做呢?

4

4 回答 4

9

尝试使用 a BindingSource,如下所示:

DataTable sourceTable = new DataTable("OriginalTable");
BindingSource source = new BindingSource();
source.DataSource = sourceTable;
myDataGridControl.Datasource = source;

现在,当您要重新绑定时,请更新sourceTable变量,如下所示:

sourceTable = new DataTable("NewTable");

// If the structure of `OriginalTable` and `NewTable` are the same, then do this:
source.ResetBindings(false);

// If the structure of `OriginalTable` and `NewTable` are different, then do this:
source.ResetBindinds(true);

注意:阅读BindingSource.ResetBindings 方法以获取有关ResetBindings().

于 2013-08-28T02:53:37.227 回答
5

您尝试过以下组合吗?:

myDataGridControl.DataSource = originalTable;
myDataGridControl.DataSource = null;
myDataGridControl.DataSource = newTable;

根据我的经验,将DataSourceto nullthen 设置为第二个来源就可以了。

于 2013-08-28T02:52:29.747 回答
1

万一有人在尝试其他建议后遇到问题,以下对 GridControl.MainView 属性上的 PopulateColumns() 的调用为我解决了这个问题。

例如:

myDataGridControl.MainView.PopulateColumns();

这也可以参考下面的 DevExpress 文章。http://www.devexpress.com/Support/Center/Question/Details/Q362978

于 2013-08-29T03:06:35.100 回答
0

有点老话题,但因为它困扰了我,我决定分享我的经验......绑定源对我不起作用,Datagridview 没有“MainView”变量。

我怀疑问题发生在我的情况下,在运行排序命令之后:

MyDataTable.DefaultView.Sort = "Column Asc";
MyDataTable = MyDataTable.DefaultView.ToTable();

我的解决方案是在执行操作后再次重新绑定:

myDataGrid.DataSource = MyDataTable;
于 2016-02-10T15:39:11.583 回答