1

我有很多地方需要将表单控件直接绑定到后备数据库。我正在使用 LINQ to DataSet 来执行此操作。

例如,我有一个 ComboBox,其中的条目由数据库查询填充。问题当然是我的所有数据都使用数字 ID,我需要进行表查询以将其转换为用户可读的选项。

通常我会加入第二个表并使用组合框 DisplayMember 指向用户可读的字符串列。这不起作用,因为在查询上使用连接或任何投影后,您(可以理解)无法将该查询转换为 DataView。

很难相信不是每个使用 DataView 的人都会遇到这个问题。有没有办法覆盖我的表单控件的行为以使它们显示其值的函数?就像如果它们的值是 v,那么它们会显示 SomeMethod(v)?

4

2 回答 2

0

我对这些事情有一个非常简单的方法 - 如果它不能很好地发挥作用,只需发明一个视图模型,即一种旨在使您的域模型和 UI 之间的映射一帆风顺的对象布局。这也可以鼓励您为视图模型而不是域模型以正确的形状填充数据;这通常在减少获取的列数(有时是行数)和(也许更重要的是)避免多次访问数据库(通过一次点击以正确的形状获取准确的数据)方面节省了可观的成本.

然后,您可以从视图模型使用简单的数据绑定技术,因为您想要的数据现在可以直接作为视图模型上的第一级值使用。

于 2011-06-29T20:14:35.473 回答
0

我不相信您试图通过 DisplayMember 实现的目标。它是一个属性,这就是它的设计方式。但是,还有其他一些方法可以实现您想要的。

1)您可以连接到 ComboBox 的Format事件。这是将数据绑定项目更改为人类可读项目以进行显示的理想场所,这正是您想要的。

2)您可以改用 LINQ to SQL 类,并覆盖部分类中的 .ToString() 部分以显示您想要的数据。当您将数据绑定到 LINQ to SQL 对象时,ComboBox 将显示该对象的字符串值。

由于您已经在使用 LINQ to DataSet,不过我只想连接到 Format 事件。

于 2011-06-29T21:20:49.623 回答