2016-04-10 31 views
0

Sınıflar'ın DataGridView'daki görüntü ilişkilerini deniyorum ancak yapamıyorum. 3 sınıf var, Produto, Unidade ve ItemVenda bu sınıflar aralarındaki ilişkileri içerir ve bu ilişkileri DataGridView'da görüntüleyemiyorum. Console numaralı telefondan foreach'u kullanarak ilişkileri iyi görüntülediniz.DataGridView'da sınıfın ilişkisini göster?

Bunu nasıl yapabilirim?

Sınıflar DataPropertyName nesne içinde bir özelliği başvurmak gerekir

private void defineGrid(){ 
    gridItensVenda.AutoGenerateColumns = false; 
    IList<ItemVenda> lista = new ItemVendaDAO().findItensByVenda(venda); 
    gridItensVenda.DataSource = lista; 

    //Display Produto - works fine 
    DataGridViewColumn c1 = new DataGridViewTextBoxColumn(); 
    c1.DataPropertyName = "produto"; 
    c1.HeaderText = "Produto"; 

    //Display Unidade of Produto doesn't work 
    DataGridViewColumn c2 = new DataGridViewTextBoxColumn(); 
    c2.DataPropertyName = "produto.unidade"; 
    c2.HeaderText = "Unidade"; 

    //add columns to grid 
    gridItensVenda.Columns.Add(c1); 
    gridItensVenda.Columns.Add(c2); 

} 
+0

Neler çalışmıyor 'Kullanmak demek? Çıktı yok? İstisna? Yanlış çıktı? Sorunların ne olduğunu tahmin etmemize izin verme! - Ayrıca: Bize nasıl sonuç vereceğimizi gösterir misiniz __look__ ?? Son olarak: Unidade sınıfı hiç gösterilmeyebilir mi? Bu, ToString yöntemine sahip değildir. – TaW

+0

Sorunu çözmek için bazı seçenekleriniz vardır: ** • ** ToString() 'sınıfları yöntemini geçersiz kılabilirsiniz ** • ** 'ItemVenda' sınıfınıza karşılık gelen string özelliğini ekleyebilirsiniz. ** • ** Izgara'nın diğer sütunlarındaki değerleri göstermek için 'CellFormatting' ızgarasını kullanabilirsiniz. ** ** Bir linq sorgusu kullanarak sonucu şekillendirebilir ve ızgarayı anonim nesneler listesine veya görünümü model –

+0

Bu mesajlar size yardımcı olabilir: [Winforms datagridview içinde bindsource ikinci düzey listeden bir sütunu bağlama] (http://stackoverflow.com/questions/36469904/how-to-bind-a-column-from -second-level-list-on-bindsource-in-winforms-datagridvi) veya [[DataGridView (İkinci Düzey Özellikler) 'de bir Navigasyon Özelliğinin Özelliklerini Göster] (http://stackoverflow.com/questions/35088181/show-properties -of-a-navigation-özellik-datagridview-ikinci düzey-propertie) –

cevap

0

DataGridView İlişki

public class Unidade{ 
    public Integer id {set;get;} 
    public String descricao {set;get;}; 

    public Unidade(){} 
} 

public class Produto{ 
    public Long id {set;get;}; 
    public String descricao {set;get;}; 
    public Unidade unidade {set;get;} 

    public Produto(){} 
} 

public class ItemVenda{ 
    public Long id {set;get;} 
    public Produto produto {set;get;} 

    public ItemVenda(){} 
} 

çalışılıyor ekran görüntülenir ve alt nesnelere gidemez inanıyoruz.

unidade'u açığa çıkarmak için ItemVenda sınıfına bir özellik ekleyebilirsiniz.

public class ItemVenda{ 
    // add this: 
    public property Unidade unidade { get {return produto.unidade;} } 
} 

Sonra sadece

DataGridViewColumn c2 = new DataGridViewTextBoxColumn(); 
c2.DataPropertyName = "unidade"; // not produdo.unidade 
c2.HeaderText = "Unidade"; 
+0

Senin önerilerini nasıl kullanabilirim NHibernate ile iyon. Ben şüphe duyuyorum çünkü NHibernate kendi özellikleri üzerinde 'virtual' kullanmaktadır ve 'Unidade '' ItemVenda''dan veritabanına eklemek istemiyorum çünkü 'Unidade'' Produto' sınıfındadır. – FernandoPaiva