我们将数据存储在SQLite数据库中。数据显示在DevExpress.XtraGrid.GridControl中。为了获得相关数据,我们创建临时表并填写它。 数据背景:
public class AccountsSQLiteDataContext : DbContext
{
public AccountsSQLiteDataContext(IDbConnection connection)
: base((SQLiteConnection)connection, false)
{
Database.SetInitializer<AccountsSQLiteDataContext>(null);
}
public DbSet<tmp_acc> TmpAccounts { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
使用DbContext:
AccountsSQLiteDataContext myContext = new AccountsSQLiteDataContext(myDbConnection);
public IQueryable AccountTable
{
get
{
return myContext.TmpAccounts;
}
}
DevExpress.Data.Linq.LinqServerModeSource myLinqSource = = new DevExpress.Data.Linq.LinqServerModeSource();
myLinqSource.QueryableSource = AccountTable;
myGridControl.DataSource = myLinqSource;
数据更改后,我致电:myLinqSource.Reload();
并非所有SQLite临时表中的数据更改都以网格显示。添加和删除表行会生效。但是没有显示单元格文本的更改。 过滤器功能将使用新值生效。见printscreen。在过滤器选项中是正确的值,在网格中是旧值。
如何刷新存储在DbContext中的本地数据,以便在临时表中更改后显示正确的值?
答案 0 :(得分:0)
您应该在GridControl上调用RefreshDataSourceMethod()
https://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridGridControl_RefreshDataSourcetopic
答案 1 :(得分:0)
我找到了两个解决方案。它们都取消了EF数据模型中项目的缓存:
使用AsNoTracking扩展方法从数据库加载实体:
public IQueryable AccountTable { 得到 { return myContext.TmpAccounts.AsNoTracking(); } }