将WinForms复选框绑定到亚音速DAL布尔时出现问题

将WinForms复选框绑定到亚音速DAL布尔时出现问题,winforms,subsonic,Winforms,Subsonic,我试图将亚音速2.1生成的DAL对象绑定到WinForm(VB.NET VS2005)。为了解决缺少IPropertyNotifyChanged实现的问题,在我的绑定方法中,我为每个要绑定的控件在controlname.DataBindings.Add()之前执行controlname.DataBindings.Clear() 文本框可以很好地处理这样的代码(ioBLL是对我的BLL对象的引用,ioDAL是其中的DAL属性): 但是当绑定到复选框时 chkObsolete.DataBinding

我试图将亚音速2.1生成的DAL对象绑定到WinForm(VB.NET VS2005)。为了解决缺少IPropertyNotifyChanged实现的问题,在我的绑定方法中,我为每个要绑定的控件在controlname.DataBindings.Add()之前执行controlname.DataBindings.Clear()

文本框可以很好地处理这样的代码(ioBLL是对我的BLL对象的引用,ioDAL是其中的DAL属性):

但是当绑定到复选框时

chkObsolete.DataBindings.Add(New Binding("Checked", ioBLL.ioDAL, namespace.Country.Schema.Columns.GetColumn("Obsolete").ToString, True, DataSourceUpdateMode.OnPropertyChanged))
当基础属性值为True时,它在运行时从不显示为勾选状态


知道为什么吗?

ioBLL.ioDAL.Observed是布尔值吗

我使用非常相似的代码,没有问题

也许唯一的区别是我使用了BindingSource

IE我在表单上使用bindingsource并将其数据源设置为ioBLL


我在将控件直接绑定到实体时遇到了其他问题,但我不记得您所描述的其中一个问题。

ioBLL.ioDAL.Observed是布尔值吗

我使用非常相似的代码,没有问题

也许唯一的区别是我使用了BindingSource

IE我在表单上使用bindingsource并将其数据源设置为ioBLL


我还遇到了其他一些将控件直接绑定到实体的问题,但我不记得您所描述的其中一个问题。

谢谢您的评论。是的,它是一个布尔值。因为我写了这篇文章,我想知道这是否是一个亚音速的例子,在VB.NET中不如在C#中工作得好,所以我咬紧牙关,用C#DAL创建了一个新的解决方案。这表现得很好,所以我用VB.NET重新创建了DAL,它也很有效!必须假设我的原始表格或所有。。。对您关于使用BindingSource的评论感兴趣。您是否也在BLL中创建所有属性并从DAL中填充它们,或者像我一样直接绑定到DAL属性?我的GUI调用BLL方法来获取、保存等。BLL反过来调用Mapper方法,该方法使用对亚音速DAL的调用填充我自己的实体类型。我的GUI对亚音速DAL一无所知,只处理我自己的实体类型和偶尔的数据表。类似这样的内容:GUI.bsCustomer.DataSource=BLL.CustomerBO.Fetch(New CustomerQuery().CustomerId.IsEqualTo(1001))感谢您的解释。如果我理解正确,您是绑定到BLL.FieldName(并在BLL级别和DAL级别保留每个字段的属性),而不是我填充到BLL.DAL.FieldName的方式?是的!事实上,我的实体基类是由代码生成器使用(在本例中为亚音速)DAL DLL构建的。谢谢您的评论。是的,它是一个布尔值。因为我写了这篇文章,我想知道这是否是一个亚音速的例子,在VB.NET中不如在C#中工作得好,所以我咬紧牙关,用C#DAL创建了一个新的解决方案。这表现得很好,所以我用VB.NET重新创建了DAL,它也很有效!必须假设我的原始表格或所有。。。对您关于使用BindingSource的评论感兴趣。您是否也在BLL中创建所有属性并从DAL中填充它们,或者像我一样直接绑定到DAL属性?我的GUI调用BLL方法来获取、保存等。BLL反过来调用Mapper方法,该方法使用对亚音速DAL的调用填充我自己的实体类型。我的GUI对亚音速DAL一无所知,只处理我自己的实体类型和偶尔的数据表。类似这样的内容:GUI.bsCustomer.DataSource=BLL.CustomerBO.Fetch(New CustomerQuery().CustomerId.IsEqualTo(1001))感谢您的解释。如果我理解正确,您是绑定到BLL.FieldName(并在BLL级别和DAL级别保留每个字段的属性),而不是我填充到BLL.DAL.FieldName的方式?是的!事实上,我的实体基类是由代码生成器使用(在本例中为亚音速)DAL DLL构建的。
chkObsolete.DataBindings.Add(New Binding("Checked", ioBLL.ioDAL, namespace.Country.Schema.Columns.GetColumn("Obsolete").ToString, True, DataSourceUpdateMode.OnPropertyChanged))