【问题标题】:BindingSource.ResetBindings not working unless "true" passed除非“true”通过,否则 BindingSource.ResetBindings 不起作用
【发布时间】:2012-02-28 17:17:10
【问题描述】:

我有一个绑定到BindingSource 的网格(它又绑定到List<T>)。当我更改底层List<T> 数据然后调用时:

bs.ResetBindings(false);

网格不会更新。但如果我打电话:

bs.ResetBindings(true);

确实会更新。我的代码现在可以工作,但我仍然不明白为什么这是必要的。根据MSDNResetBindings的参数应该设置为:

true 如果数据架构已更改; false 如果只有值发生了变化

我当然没有更改任何数据架构...那我为什么需要 true

【问题讨论】:

  • 你用的是什么网格?我的猜测是它处理 ListChangedType.Reset 通知的方式可能存在错误。
  • 我正在使用 DevExpress 的 XtraGrid
  • 您是否可以在 DevExpress 代码上使用 ILSpy 等反编译器来查看其代码是否存在错误?另外,您是否可以尝试使用 BindingList 而不是将 List 传递给 BindingSource 并查看是否可行。
  • 我使用 DevExpress 效果很好。我建议您为网格控件提供绑定源,也为网格视图提供绑定源。如果有必要,以编程方式将数据模型提供给绑定源。不要使用隐式视图,只需创建您的自定义视图。如果没有按预期工作,请在官方网站上搜索帮助。
  • @JoelFan 我也有同样的问题。我有一个调用 bs.ResetBindings(false); 的刷新按钮;当我更改 SQL Server Db 表中的值并单击刷新按钮时,更改的值在使用“false”或“true”的任何一种情况下都不会显示。但是,如果我重新加载表单,则会显示新值。我正在使用来自 .NET 的 DataGridView(不是来自 Devexpress)。它适用于this user

标签: c# data-binding .net-4.0


【解决方案1】:

如果您有两种类型:Cat 和 Dog,它们都派生自 Animal。这将无法正常工作:

来自 Designer.cs

animalBindingSource1.DataSource = typeof(Animal);

然后在例如 Form_Load 中

List<Cat> cats = getCats();
animalBindingSource1.DataSource = cats;

尝试使用 BindingList,例如

animalBindingSource1.DataSource = new BindingList<Animal>(cats);

如果它不起作用,请发布您的代码。 devexpress 网格控件可能没有任何问题。

【讨论】:

  • 重读您的帖子:您是否使用 DataSets 作为数据源?
  • 是否需要先给它分配一个类型,然后再分配一个实际的实例?
【解决方案2】:

就这样吧:

bs.DataSource = ListOfMyObjectOrWhatEver; //EVEN IF ALREADY MADE!
bs.ResetBindings(false);
grid.Refresh();

希望对你有帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2019-05-12
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    相关资源
    最近更新 更多