我有很多地方需要将表单控件直接绑定到后备数据库。我正在使用LINQ to DataSet来执行此操作。
例如,我有一个ComboBox,其中的条目由数据库查询填充。问题当然是我的所有数据都使用数字ID,我需要进行表查询以将其转换为用户可读的选项。
通常我会加入第二个表并使用组合框DisplayMember指向用户可读的字符串列。这不起作用,因为在查询上使用连接或任何投影后,您(可以理解)无法将该查询转换为DataView。
很难相信每个使用DataView的人都会遇到这个问题。有没有办法覆盖我的表单控件的行为,使它们显示其值的功能?就像他们的Value是v一样,然后他们显示SomeMethod(v)?
答案 0 :(得分:0)
我对这些事情有一个非常简单的方法 - 如果它不能很好地发挥作用,只需创建一个视图模型,即一个对象布局,用于在你的领域模型和UI普通航行之间进行映射。这也可以鼓励您以正确的形状为视图模型填充数据,而不是域模型;这通常可以减少提取的列数(有时是行数),并且(可能更重要的是)避免多次访问数据库(通过在一个数据库中提取完全正确的数据)击中,形状正确。)
从视图模型中,您可以使用简单的数据绑定技术,因为您想要的数据现在可以直接作为视图模型上的第一级值使用。
答案 1 :(得分:0)
我不相信你想通过DisplayMember实现的目标。这是一个属性,就是它的设计方式。但是,还有一些其他方法可以实现您的目标。
1)您可以连接到ComboBox的Format事件。这是将数据绑定项目更改为人类可读项目以供显示的理想场所,这正是您想要的。
2)您可以使用LINQ to SQL类,并覆盖部分类中的.ToString()部分以显示数据的方式。当您将数据绑定到LINQ to SQL对象时,ComboBox将显示该对象的字符串值。
因为你已经在使用LINQ to DataSet,所以我只想连接到Format事件。