Reflection e typed Dataset

<Problema>
devo instanziare un tipo da una dll via reflection. Il tipo in questione è una datatable all'interno di un typed Dataset.
Il tipo viene scelto dall'utente tra i tipi ritornati da GetTypes.
<Problema />

<Soluzione>
        'Con questo faccio scegliere la DLL all'utente e carico i tipi in una treeview:       
        Dim dlgOpen As New OpenFileDialog
        dlgOpen.ShowDialog

        Dim asm As System.Reflection.Assembly
        asm = System.Reflection.Assembly.LoadFrom(dlgOpen.FileName)

        For Each TypeInfo as Type In asm.GetTypes
            TreeView.Nodes.Add(TypeInfo.FullName)
        Next

        'E con questo (dovrei) istanziare il tipo scelto dall'utente per poi lavorarci
        Dim tipo As Object = asm.CreateInstance(TreeView.SelectedNode.Text)
        'Do Something with tipo
<Soluzione />

<Inghippo>
Mmmmhhh...c'è l'inghippo
Già nella lista di nodi restituita tutte le Datatable non hanno un fullname "pulito" come tutti gli altri tipi
invece di essere nella forma:
MyNamespace.MyTypedDataset.tbl_UtenteDataTable
compare nella forma
MyNamespace.MyTypedDataset+tbl_UtenteDataTable (ha un "+" al posto dell'ultimo punto)
<Inghippo />

<riflessione>
Anche se non capisco esattamente per cosa sta quel più, mi sveglio un attimo e capisco che probabilmente
non posso istanziare una dataTable se non istanziando il typedDataset padre.
<riflessione />

<workaround>
            'Istanzio prima il Dataset che la contiene ricavando il nome dalla selezione, e poi ritorno la Datatable dalla collezione Tables
            Dim nodeText As String = TreeView.SelectedNode.Text
            Dim plusPosition As Integer = nodeText.IndexOf("+")
            Dim nomeDataset As String = nodeText.Substring(0, plusPosition)
            Dim tipoDataset As Object = asm.CreateInstance(nomeDataset)
            Dim tipoDatatable As DataTable = CType(tipoDataset, DataSet).Tables(nodeText.Substring(plusPosition + 1).Replace("DataTable", ""))
<workaround />           

<PS>
Ho scritto qualcosa di tecnico!
Ma allora ce la faccio!
No devo aver sbagliato da qualche parte...magari non well-formed il documento (si infatti mi manca il nodo radice!)
Vabbè non è ai livelli dei guru di ugi però è tutto mio!
<PS />

Print | posted on Wednesday, September 1, 2004 2:58 PM

Comments have been closed on this topic.