Ho un'iterfaccia IComponente dove dichiaro la struttura per oggetti di vario tipo (Lavorazioni, Materiali, Tempi Macchina, ecc...) tutti che implementano questa interfaccia.
Ho una collection che popolo con oggetti che implementano l'interfaccia IComponente
Public Class Componenti
Inherits BindingList(Of IComponente)
Ogni oggetto ha una proprietà Quantità che varia come tipo: su Lavorazioni è un TimeSpan in sola lettura, su Materiali è un Double, su Tempi Macchina è un TimeSpan ReadWrite, ecc... Per questo motivo non ho dichiarato questa proprietà nell'interfaccia ma su ogni singola classe che la implementa.
Per popolare la collection uso il seguente codice:
Select Case cp.Tipo
Case "L"
Me.Items.Add(New Lavorazione(CType(cp, IComponenteDB)))
Case "M"
Me.Items.Add(New Materiale(CType(cp, IComponenteDB)))
Case "P"
Me.Items.Add(New Programmazione(CType(cp, IComponenteDB)))
Case "E"
Me.Items.Add(New LavorazioneEsterna(CType(cp, IComponenteDB)))
Case "T"
Me.Items.Add(New TempoMacchina(CType(cp, IComponenteDB)))
Case ...
End Select
Ora vorrei visualizzare la collection in un DataGridView ed esporre anche la proprietà Quantità, ma ovviamente, essendo la collection di classi IComponente la proprietà non è presente "direttamente" negli oggetti, ma dovrei effettuare un cast per ogni riga.
Per assegnare i dati al DataGridView uso il seguente sistema nell'evento Load del Form:
DataGridView.DataSource=collection
Come posso effettuare il cast ed in quale evento del DataGridView?
Ho provato nell'evento RowsPrePaint del DataGridView ma non sono riuscito ad effettuare il cast: come posso fare?
La proprietà DataBoundItem è ReadOnly e altre proprietà che mi restituiscono l'oggetto che corrisponde alla riga non l'ho trovata.
Grazie dell'aiuto!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
EDIT