2010-11-21 4 views
5

Je souhaite lier une colonne de ma classe DataGridView à une entrée d'un objet de deuxième niveau en C# utilisant .NET 4.0. Par exemple:Liaison de DataGridViewColumn à l'objet de second niveau

Je objet A:

public class A 
{ 
    public long id; 
    public B bClass; 
} 

et l'objet B

public class B 
{ 
    public long id; 
    public string name; 
} 

Est-il possible de déclarer une liste de classe A est comme la source de données sur un DataGridView, mais bind une des colonnes à l'attribut de nom dans la classe B?

J'ai distillé un peu, mais j'espère que ce n'est pas déroutant. Merci pour l'aide!

Répondre

0

Oui.
Lorsque vous liez, vous faites ceci:

grid.DataSource = MyAList; 
grid.DataMember = "bClass"; 
grid.DataBind(); 

Maintenant, quand vous lier, vous évaluez les membres de la classe B.

+0

Mais cela ne va-t-il pas se lier incorrectement? Ma compréhension est que la grille de données peut seulement se lier aux primitives, aux collections/enumerables ou aux interfaces INotifyPropertyChanged. –

+0

@AK; vous pouvez toujours gérer une liaison spécifique dans l'événement 'ItemDataBound'. – BeemerGuy

1

La solution ci-dessus ne fonctionne pas pour moi. Je compris la question plus comme dans ce fil: Is it possible to bind complex type properties to a datagrid?

Ce que je l'ai fait est de mettre en œuvre une classe C dans la couche qui IUG-a toutes les propriétés recherchées dans le premier niveau. Vous pouvez également écrire un constructeur initialisant la nouvelle classe à partir de la classe A:

public class C 
{ 
    public C(A a) 
    { 
     Id = a.Id; 
     Bid = a.bClass.Id; 
     Bname = a.bClass.Name; 
    } 

    public long Id; 
    public long Bid; 
    public string Bname; 
} 
Questions connexes