DataGridView数据源未更新

时间:2013-08-28 02:43:28

标签: c# winforms data-binding datatable devexpress

我正在使用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 个答案:

答案 0 :(得分:8)

尝试使用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);

注意:有关ResetBindings()的详细信息,请阅读BindingSource.ResetBindings Method

答案 1 :(得分:5)

您是否尝试过以下组合?:

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

根据我的经验,将DataSource设置为null然后设置为第二个来源就可以了。

答案 2 :(得分:1)

如果有人在尝试其他建议后遇到麻烦,以下对GridControl.MainView属性上的PopulateColumns()的调用解决了我的问题。

例如:

myDataGridControl.MainView.PopulateColumns();

这也可以从以下使用DevExpress的文章中引用。 http://www.devexpress.com/Support/Center/Question/Details/Q362978

答案 3 :(得分:0)

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

我怀疑在运行排序命令后,问题就出现了:

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

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

myDataGrid.DataSource = MyDataTable;