【问题标题】:How do I bind a database to a ListView in WPF?如何将数据库绑定到 WPF 中的 ListView?
【发布时间】:2011-11-13 21:47:29
【问题描述】:

我有一些想要显示的数据(大约 1000 行)。我希望用户能够动态过滤和排序数据。我还必须能够保存和加载数据。我对数据库比较陌生,需要您的帮助来决定哪种方法是最好/最合理的:

第一种变体: 这是我目前的做法。我正在使用绑定到 RowItems 的 ObservableCollection 的 ListView/GridView。我现在可以使用视图进行排序和过滤。保存和加载是通过序列化完成的。

第二个变种: 使用数据库来存储数据。然后将数据加载到与上述相同的业务对象中。

第三种变体: 将 ListView 直接绑定到数据库。我刚刚发现这在某种程度上是可能的,但在细节上仍然有些模糊。特别是在排序和过滤方面(可以通过数据库查询完成吗?)

第四变种: 将数据存储在数据库中。使用业务对象的 ObservableCollection 进行绑定。但是通过 SQL 查询过滤(和排序?)。

这些是我必须满足我的要求的想法。我想知道哪一个是最好的/最简单的/表现最好的/等等。或者如果您建议其他方法。enter code here

【问题讨论】:

  • 小心直接绑定到数据库,因为某些 WPF 控件会延迟加载数据。这对您的应用程序意味着,当用户滚动列表时,WPF 将进行更多的数据库调用,这会使 GUI 卡顿。
  • @Wer2:我直接绑定到数据库的动机是我必须将所有数据保存在内存中,否则。或者这不是我想的那么大的劣势?
  • 这取决于你的数据集有多大。如果您的数据太大而无法保存在内存中,您可能需要考虑分块加载它,而不是让 WPF 处理它。

标签: wpf database listview binding


【解决方案1】:

彼得,您需要考虑以下几点:

  • 尽可能不要在后端数据和显示之间进行紧密集成。使以后更容易更改。您可以使用 NHibernate 或其他 ORM 来更轻松地表示和读取/写入数据库中的数据。这样你就可以在它们之间有层/层(又名 n 层)

  • 你只需要调用DB来读取数据,它是1000行还不错,你可以一次读取它们并保存在内存中。您可以在内存中的 DomainModel/Buisness 对象上执行的任何过滤/排序/分组,而无需接触库。

我会混合使用变体 1) 和 2)。

我会使用业务对象来表示来自数据库的数据(NHibernate 非常方便)。然后,我将在客户端上执行所有数据过滤/排序,而无需每次都请求数据库。对数据库的任何写入都必须通过某种领域模型层或 ORM,以便它们不会紧密链接。这允许我在不影响 GUI 前端的情况下更改数据库

【讨论】:

    猜你喜欢
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2013-03-22
    • 2011-01-01
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多