2009-06-16 5 views
1

J'essaye de lier un objet DAL généré par SubSonic 2.1 à un WinForm (VB.NET VS2005). Afin de contourner le manque d'implémentation de IPropertyNotifyChanged, dans ma méthode de liaison, je fais un controlname.DataBindings.Clear() avant un controlname.DataBindings.Add() pour chaque contrôle que je veux lier.Problème Liaison WinForms CheckBox à SubSonic DAL Boolean

zones de texte fonctionnent très bien avec le code comme celui-ci (ioBLL est la référence à mon objet BLL et ioDAL à la propriété DAL en son sein):

txtCountryName.DataBindings.Add(New Binding("Text", ioBLL.ioDAL, namespace.Country.Schema.Columns.GetColumn("CountryName").ToString, True, DataSourceUpdateMode.OnPropertyChanged)) 

mais lors de la liaison à une case à cocher

chkObsolete.DataBindings.Add(New Binding("Checked", ioBLL.ioDAL, namespace.Country.Schema.Columns.GetColumn("Obsolete").ToString, True, DataSourceUpdateMode.OnPropertyChanged)) 

il n'apparaît jamais coché au moment de l'exécution lorsque la valeur de la propriété sous-jacente est True.

Des idées pourquoi?

Répondre

1

Est-ce que ioBLL.ioDAL.Obsolete est un booléen?

J'utilise un code très similaire sans problèmes.

Peut-être la seule différence est que j'utilise une BindingSource.

IE J'utilise une source de liaison sur mon formulaire et définissez DataSource à ioBLL. J'ai eu d'autres problèmes de liaison des contrôles directement à mes entités, mais je ne me souviens pas du problème que vous décrivez comme étant l'un d'entre eux.

+0

Merci pour vos commentaires. Oui, c'est un booléen. Depuis que j'ai écrit ceci, je me demandais si c'était une instance de SubSonic ne fonctionnant pas aussi bien avec VB.NET que C#, alors j'ai mordu la balle et créé une nouvelle solution avec un C# DAL. Cela s'est bien passé, donc j'ai ensuite recréé le DAL avec VB.NET, et ça a marché aussi! Doit supposer quelque chose de mal avec mon formulaire original ou BLL ... Intéressé par vos commentaires sur l'utilisation d'une BindingSource. Est-ce que vous créez également toutes les propriétés dans votre BLL et les peuplez de votre DAL, ou faites comme moi et liez directement aux propriétés DAL? – kevinw

+0

Mon interface graphique appelle les méthodes BLL à récupérer, à enregistrer, etc. BLL appelle à son tour les méthodes Mapper qui remplissent mes propres types d'entité en utilisant les appels à la couche DAL subsonique. Mon GUI ne sait rien de la DAL Subsonic et ne gère que mes propres types d'entités et parfois DataTables. Quelque chose comme ceci: GUI.bsCustomer.DataSource = BLL.CustomerBO.Fetch (nouvelle CustomerQuery(). CustomerId.IsEqualTo (1001)) – Zapatta

+0

Merci pour l'explication. Si je vous comprends bien, vous vous liez à BLL.FieldName (et détenez des propriétés pour chacun des champs au niveau de BLL ainsi que le niveau DAL) plutôt que ma façon de remplir BLL.DAL.FieldName? – kevinw

Questions connexes