Da DataTable a A Classe a tipizzazione forte

sabato 11 ottobre 2008 - 12.21

Teech Profilo | Expert

Salve a tutti!!! Ho un problema di logica di programmazione che non mi fa dormire alla notte. (VB2005 per la precisione)
Ho una classe che connettendosi ad un Database mi restituisce (attraverso una funzione) un DataTable ovviamente collegato ad un DataAdapter (per il quale ho scritto i vari Command in mdo che rispecchi le mie esigenze). Questo DataTable contiene un elenco di Clienti con tutti i suoi dati (Codice, Ragione Sociale, Indirizzo, ecc..): i dati sono tanti.
Ho una classe Cliente dove espongo i vari campi del DataTable come proprietà "tipizzando". Per fare ciò ho inserito una classe Collection (chiamata 'Clienti') che al suo interno recupera il DataTable e iterando i DataRow contenuti istanzia una classe Cliente alla volta attraverso il seguente codice:
Private Sub Popola() Dim dt as DataTable = DataBase.GetClienti() For Each dr As DataRow In dt.Rows Dim c As New Cliente(dr) Me.List.Add(c) Next End Sub
La classe Cliente prende il DataRow e ne associa i campi alle proprietà come di seguito riportato:
Public Class Cliente Private _dr As DataRow Sub New(ByVal dr As DataRow) _dr = dr End Sub Public ReadOnly Property Codice() As String Get Return _dr("Codice").ToString.Trim End Get End Property Public ReadOnly Property RagioneSociale() As String Get Return _dr("RagioneSociale").ToString.Trim End Get End Property .... End Class
In questo modo, facendo la Update del DataAdapter, avendo assegnato dei valori alle variabili della classe Cliente tutto funziona tranquillamente.. Però non mi piace per niente la Sub New della classe Cliente: in questo modo la classe potrebbe "prendere in pasto" anche un DataRow di Articoli piuttosto che un DataRow di Clienti con caratteristiche errate.

Finalmente la domanda:
Che oggetto posso passare alla classe Cliente in modo che sia a tipizzazione forte e mantenendo il "collegamento" al DataAdapter? O meglio, come posso tipizzare il DataRow per non perdere il "collegamento" al DataAdapter?
Come potete notare alcune proprietà della classe Cliente sono ReadOnly ma altre devo poterle aggiornare sul database quindi devo necessariamente passare un oggetto quando istanzio la classe per poter valorizzare le variabili per le proprietà ReadOnly.

Spero di essere stato chiaro nell'esposizione di questo problema... Grazie della pazienza
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

rossimarko Profilo | Guru

Ciao,

hai già visto i dataset tipizzati? Da quello che dici mi sembra che siano quello che cerchi, ma magari hai scelto di non usarli per qualche motivo in particolare.

Un post di approfondimento: http://weblogs.asp.net/scottgu/archive/2006/01/15/435498.aspx e altri link: http://msdn.microsoft.com/it-it/library/ms171895.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Teech Profilo | Expert

Li conosco un pò ma vorrei gestire i Dataset da codice perchè non ho corrispondenza fra tabelle e classi e quindi vorrei maggiore flessibilità in fase di programmazione.
Pensavo ad un sistema per rimappare i campi dei datarow sulla classe Cliente all'interno della collection ma non riesco a definire come farlo...
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

rossimarko Profilo | Guru

Se guardi il codice dei dataset tipizzati (puoi fare una prova di esempio) vedrai che creano delle classi che ereditano da Dataset, datarow ecc che espongono delle proprietà custom che rappresentano le colonne. Potresti fare anche tu la stessa cosa...
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Teech Profilo | Expert

Come dicevo, i DataSet tipizzati li conosco un pò... Mi sa che dovro prendere maggiore confidenza...
Grazie mille!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5