2010-11-21 18 views
5

Me gustaría vincular una columna en mi clase DataGridView a una entrada en un objeto de segundo nivel en C# utilizando .NET 4.0. Por ejemplo:Enlace de DataGridViewColumn al objeto de segundo nivel

tengo Objeto A:

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

y el objeto B

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

¿Hay una manera de declarar una lista de clase A de como origen de datos en un DataGridView, sin embargo, se unen una de las columnas para el atributo de nombre en la clase B?

Destilé esto un poco, pero espero que esto no sea confuso. ¡Gracias por la ayuda!

Respuesta

0

Sí.
Cuando se enlaza, esto se hace:

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

Ahora cuando estás vinculante, usted está evaluando a los miembros de la clase B.

+0

¿Pero no se unirá de forma incorrecta? Según entiendo, la cuadrícula de datos solo se puede unir a primitivas, colecciones/enumerables o interfaces INotifyPropertyChanged. –

+0

@AK; siempre puede manejar un enlace específico en el evento 'ItemDataBound'. – BeemerGuy

1

La solución anterior no funciona para mí. Entendí la pregunta más como en este hilo: Is it possible to bind complex type properties to a datagrid?

Lo que hice fue implementar una clase C en la capa de gui que tiene todas las propiedades deseadas en el primer nivel. También puede escribir un constructor que inicialice la nueva clase de la clase 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; 
} 
Cuestiones relacionadas