我正在尝试找到一种有效的方法来在 winforms 中对 Entity Framework 模型的计算字段进行数据绑定(bind)。我正在使用 Visual Studio 2008 和 .NET Framework 3.5。一个例子是 EntityX,假设我有 columnA 和 columnB,我想要一个名为 sumAB 的计算属性。我一直这样做的方式是使用部分类:
public partial class EntityX
{
public int sumAB
{
get
{
return this.columnA + this.columnB;
}
}
}
然后我使用 visual studio 将 EntityX 添加为数据源,这样我就可以使用自动拖放数据绑定(bind)。我遇到的问题是计算的属性没有出现在数据源字段下。我正在寻找一种方法来实现计算字段的自动数据绑定(bind)。
我知道我可以手动执行此操作,但是当 columnA 或 columnB 更改时,我还必须手动编写所有绑定(bind)代码以刷新字段。我也无权在 SQL 服务器端计算此字段。
有谁知道有什么方法可以完成这个或任何其他类似的指导吗?
谢谢!
更新
我在另一台机器上使用 Visual Studio 2010 和 .NET 4 对此进行了测试,但我仍然收到相同的行为。有趣的是,我可以手动创建一个文本框并添加一个数据绑定(bind),它会正常工作,如下所示:
sumABTextBox.DataBindings.Add(
new System.Windows.Forms.Binding("Text", EntityXBindingSource, "sumAB", true));
如果我将属性放在 .edmx 文件中,它也有效,但这是不可取的,因为它会在数据库更新时被删除。
还有其他想法吗?
更新 2
仍然没有解决方案...我不得不在我的代码中使用替代方案来满足截止日期。如果有人找到答案,我仍然对此很感兴趣......
最佳答案
对我来说听起来很奇怪。因为我在我的项目中使用了相同的方法( Entity Framework 、 self 跟踪实体、WCF、Winforms)。
我构造了一个简单的 winforms 应用程序来测试它,“计算”属性只显示在数据绑定(bind)中。文本框控件的文本属性。
我创建了一个简单的类:
public partial class Test
{
public int A { get; set; }
public int B { get; set; }
public Test()
{
}
}
public partial class Test
{
public int AB
{
get { return A * B; }
}
}
向表单添加了一个绑定(bind)源(数据源指向一个测试类型的对象)和三个绑定(bind)到绑定(bind)源和属性的文本框:A、B 和 AB。在表单的构造函数中,我创建了一个测试实例,为 A 和 B 填充了值,将 bindingsource.DataSource 设置为创建的实例,并认为在表单上很常规 ;)
这个简单的测试用例与您的情况没有什么不同,只是您使用的实体只是对象而已。我真的从你的描述中看不出问题......任何进一步的评论都可以帮助我进一步帮助你......
关于c# - Entity Framework 中计算属性的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4398691/