2009-03-25 11 views

Odpowiedz

12

.

Utwórz właściwość w MyClass, która ujawnia właściwość SubClass.Property. Podobnie jak:

+1

prawo, to był mój ostatni scenariusz, ale mam 7 podtypów do czynienia z tak szukałem dla lepszy sposób. Ale za napiwek. –

+0

@BZ http://www.developer-corner.com/blog/2007/07/19/datagridview-how-to-bind-nested-objects/ –

3

Nie można powiązać obiektu DataGridView z zagnieżdżonymi właściwościami. To nie jest dozwolone.

Jednym z rozwiązań jest użycie tego ObjectBindingSource jako źródła danych.

4

Możesz dodać program obsługi do zdarzenia DataBindingComplete i wypełnić tam zagnieżdżone typy. coś takiego:

w Form_Load:

dataGridView.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView_DataBindingComplete); 

później w kodzie:

void dataGridView_DataBindingComplete(object sender, 
     DataGridViewBindingCompleteEventArgs e) 
{ 
    foreach (DataGridViewRow row in dataGridView.Rows) 
    { 
     string consumerName = null; 
     consumerName = ((Operations.Anomaly)row.DataBoundItem).Consumer.Name; 
     row.Cells["Name"].Value = consumerName; 
    } 
} 

To nie jest ładne, ale działa.

+0

Może być szybszy niż przesyłanie wszystkich przedmiotów do podtypu przed databind. – vizmi

0

Możesz używać Linq też!

Get listy rodzajowy i używać .Wybrać do wyboru pola jak poniżej exemple:

var list = (your generic list).Select(i => new { i.idnfe, i.ide.cnf }).ToArray(); 

if (list .Length > 0) { 
     grid1.AutoGenerateColumns = false; 
     grid1.ColumnCount = 2; 

     grid1.Columns[0].Name = "Id"; 
     grid1.Columns[0].DataPropertyName = "idnfe"; 
     grid1.Columns[1].Name = "NumNfe"; 
     grid1.Columns[1].DataPropertyName = "cnf"; 

     grid1.DataSource = lista; 
     grid1.Refresh(); 

} 
Powiązane problemy