2009-09-21 9 views
1

J'ai une classe comme ceci:Databinding à une classe personnalisée en C#

public class Person 
{ 
    Int32 id; 
    Boolean isMarried = false; 
    String displayName; 
    Detail mainDetail = new Detail(); 
    Detail partnerDetail = new Detail(); 
} 

public class Detail 
{ 
    String firstName; 
    String lastName; 
    DateTime dob; 
    String address; 
} 

Et puis un formulaire qui a choisi textboxes pour afficher les informations dans l'objet. Ceci doit être mis à jour lorsque la personne sélectionnée est modifiée.

Maintenant, pour les champs simples, tels que DisplayName c'est un morceau de gâteau:

txtTitle.DataBindings.Add("Text", selectedPerson, "displayName"); 

mais comment puis-je lier une autre zone de texte à la prenom de la propriété mainDetail?

Cette tentative:

txtFirstNameMain.DataBindings.Add("Text", selectedPerson.mainDetail, "firstName"); 

renvoie une erreur d'exécution:

"Ne peut pas se lier à la propriété ou de la colonne prenom sur le DataSource Nom du paramètre: DataMember"

Merci pour votre aide !

+0

Vous devez utiliser les propriétés publiques, mais je ne pense pas que ce soit votre problème, sinon aucune liaison ne fonctionnerait. - Je suppose que vous venez de rendre le code plus petit pour l'afficher. –

Répondre

2

vous devez utiliser les propriétés publiques pour databinding, comme ceci:

public partial class Form1 : Form 
    { 
     Person person; 
     public Form1() 
     { 
      InitializeComponent(); 

      person = new Person(); 
      this.titleTextBox.DataBindings.Add("Text", person, "DisplayName"); 
      this.firstNameTextBox.DataBindings.Add("Text", person.MainDetail, "FirstName"); 
     } 
    } 

    public class Person 
    { 
     public Int32 ID { get; set; } 
     public Boolean IsMarried { get; set; } 
     public String DisplayName { get; set; } 
     public Detail MainDetail { get; set; } 
     public Detail PartnerDetail { get; set; } 

     public Person() 
     { 
      MainDetail = new Detail(); 
      PartnerDetail = new Detail(); 
     } 
    } 

    public class Detail 
    { 
     public String FirstName { get; set; } 
     public String LastName { get; set; } 
     public DateTime DateOfBirth { get; set; } 
     public String Address { get; set; } 
    } 
0

Essayez ceci:

txtFirstNameMain.DataBindings.Add("Text", selectedPerson, "mainDetail.firstName"); 

Je pense que la syntaxe correcte.

Éditer: Cela devrait être la syntaxe correcte. See here pour une documentation sur la propriété de liaison de données.

Il se peut toutefois qu'un problème soit survenu avec votre code: Vous ne pourrez peut-être pas utiliser la liaison de données par rapport aux champs, vous devrez donc les convertir en propriétés.

3

Vous devez utiliser des propriétés pour la liaison, pas des champs.

0

Windows Forms databinding fonctionne contre les propriétés et ne supporte pas les champs. Les propriétés auxquelles vous liez doivent également être déclarées public.

Questions connexes