C# DataGridView数据源未更新

C# DataGridView数据源未更新,c#,winforms,data-binding,datatable,devexpress,C#,Winforms,Data Binding,Datatable,Devexpress,我使用的是Winforms DevXPress,我正在将一个DataTable绑定到一个DataGridView,它工作正常。我遇到的问题是,我有一些函数将构建一个新的DataTable对象,该对象与原始对象分离,需要替换绑定到DataGridView的原始DataTable DataTable originalTable = new DataTable("OriginalTable"); //Populate originalTable myDataGridControl.DataSou

我使用的是Winforms DevXPress,我正在将一个DataTable绑定到一个DataGridView,它工作正常。我遇到的问题是,我有一些函数将构建一个新的DataTable对象,该对象与原始对象分离,需要替换绑定到DataGridView的原始DataTable

DataTable originalTable = new DataTable("OriginalTable");

//Populate originalTable 

myDataGridControl.DataSource = originalTable;
上面的代码一切正常,但是下面的代码创建了一个新的DataTable,需要设置为myDataGridControl的数据源

DataTable newTable = new DataTable("NewTable");

//Populate newTable

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

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

您尝试过以下组合吗

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

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

尝试使用
绑定源
,如下所示:

DataTable sourceTable = new DataTable("OriginalTable");
BindingSource source = new BindingSource();
source.DataSource = sourceTable;
myDataGridControl.Datasource = source;
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);
现在,如果要重新绑定,请更新
sourceTable
变量,如下所示:

DataTable sourceTable = new DataTable("OriginalTable");
BindingSource source = new BindingSource();
source.DataSource = sourceTable;
myDataGridControl.Datasource = source;
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()
的更多信息,请阅读。如果任何人在尝试其他建议后仍有问题,以下对GridControl.MainView属性上的PopulateColumns()的调用为我解决了问题

例如:

myDataGridControl.MainView.PopulateColumns();

这也可以从以下关于DevExpress的文章中引用

这是一个老话题,但因为它困扰着我,我决定分享我的经历。。。 绑定源代码对我不起作用,Datagridview没有“MainView”变量

在我的例子中,我怀疑问题发生在运行排序命令之后:

MyDataTable.DefaultView.Sort = "Column Asc";
MyDataTable = MyDataTable.DefaultView.ToTable();
我的解决方案是在执行以下操作后重新绑定:

myDataGrid.DataSource = MyDataTable;

winforms…很抱歉没有提到这一点。这实际上是我第一次尝试让它工作,但不幸的是它没有改变它。这在过去也对我有效。我确实尝试过,但似乎不起作用。不确定为什么这不起作用。这似乎在更新行,但列没有更新。我已经验证了这些列实际上在sourceTable中,但是它们没有显示网格控件上的更改。