14 messaggi dal 20 febbraio 2003
Salve a tutti i lavoratori d'agosto :)
Ho creato un dataset tipizzato (_DsMercatino) dal quale eredito: nella
nuova classe (DsMercatino) ho creato una nuova classe datatable
(tblMercatinoDataTable) la quale eredita a sua volta da un dataTable nel
DataSet(tipizzato) _DsMercatino (cioè da
_DsMercatino._tblMercatinoDataTable).
Ho messo i costruttori obbligatori per la compilazione, qualche
attributo(copiati dalla classe originale) e qualche metodo/proprietà che
mi serviva: e fin qui tutto bene, almeno nella compilazione.
Tralasciando il perché di una simile scelta, il tutto dovrebbe
funzionare no?

Bhe no :(
Quando vado a richiamare la proprietà tblMercatinoDataTable della classe
DsMercatino (vedere il codice) mi rimanda un'invalidCastException.. ma
non è una sottoclasse?
Forse sbaglio qualcosa di basilare..
Ho provato a fare la stessa cosa mettendo la classe
tblMercatinoDataTable esterna alla classe dataset ma la sinfonia non
cambia..
Dove sbaglio?
Idee?

Sotto riporto la classe:

[Serializable()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Diagnostics.DebuggerStepThrough()]
[System.ComponentModel.ToolboxItem(true)]
public class DsMercatino : _DsMercatino
{
public DsMercatino() : base() {}

[System.ComponentModel.Browsable(false)]

[System.ComponentModel.DesignerSerializationVisibilityAttribute(System.C
omponentModel.DesignerSerializationVisibility.Content)]
public tblMercatinoDataTable tblMercatino
{
get
{
return (tblMercatinoDataTable)this._tblMercatino;
}
}

[System.Diagnostics.DebuggerStepThrough()]
public class tblMercatinoDataTable :
_DsMercatino._tblMercatinoDataTable
{
public tblMercatinoRow NewtblMercatinoRow()
{return (tblMercatinoRow)base.New_tblMercatinoRow();}
}

[System.Diagnostics.DebuggerStepThrough()]
public class tblMercatinoRow : _DsMercatino._tblMercatinoRow
{
internal tblMercatinoRow(DataRowBuilder rb): base(rb) {}

public int IdUtente
{
get{return base.IdCollegamento01;}
set{base.IdCollegamento01 = value;}
}
}
}


ciao e buon agosto a tutti :)
ma
this._tblMercatino che tipo è ?
Nel senso, perché fare un cast se esiste solo quel tipo.
Oppure, la dichiarato così?

DataTable tblMercatino

Non puoi fare un cast da un tipo ad uno derivato, ma il contrario.

Ciao

Il mio blog
Homepage
14 messaggi dal 20 febbraio 2003
Grazie della risposta
Infatti il problema è proprio questo..
la sottoclasse necessita di più informazioni che la sovraclasse ovviamente non può darle.. :)

Il mio obbiettivo però era quello di creare un dataset(con dentro dei datatable) con i nomi delle colonne modificati per renderli maggiormente intuitivi, senza andare a modificare il database: questo per creare delle base dati(come struttura, e di conseguenza adattatori dati ecc..) indipendenti dalle richieste dei vari clienti, tutto per automatizzare il più possibile lo sviluppo..
idee?
Ok, fai un un tuo dataset, che va bene, fai dei tuoi dataTable
es:
VenditeDataTable,
fai una proprietà del DataSet che ti restituisce la tabella vendite
public VenditeDataTable Vendite
{
get
{
return Tables["Vendite"];
}
}

in VenditeDataTable, farai delle proprietà che fanno da ponte per le colonne, es
public DataColumn QuantitaDataColumn
{
get
{
return this.Columns["quantita"]
}
}

fai magari un tuo Row. C'è un bel po' di codice da scrivere, in effetti.
Se hai vs.net questo lavoro quando crei un type DataSet te lo fa tutto da solo, è comodissimo.

Ciao

Il mio blog
Homepage
27 messaggi dal 30 aprile 2002
retek_ate ha scritto:
Grazie della risposta
Infatti il problema è proprio questo..
la sottoclasse necessita di più informazioni che la sovraclasse ovviamente non può darle.. :)

Il mio obbiettivo però era quello di creare un dataset(con dentro dei datatable) con i nomi delle colonne modificati per renderli maggiormente intuitivi, senza andare a modificare il database: questo per creare delle base dati(come struttura, e di conseguenza adattatori dati ecc..) indipendenti dalle richieste dei vari clienti, tutto per automatizzare il più possibile lo sviluppo..
idee?

Vorrei aggiungere a quanto detto giustamente da Ricciolo che per ottenere un dataset tipizzato senza l'ausilio di VS.NET puoi utilizzare il comando XSD.EXE dell'SDK da riga di comado.
HTH
Stefano [VC#.IT]
14 messaggi dal 20 febbraio 2003
Grazie ancora delle risposte

Grazie a zio uso vs_net e i dataset tipizzati è uno scherzo farli..
ma
il mio problema come già detto è di rinominare delle colonne di un dataset tipizzato e ovviamente non posso farlo alla sua creazione(altrimenti l'aggiornamento con il DataAdapter non trova le colonne della tabella no?): l'ideale sarebbe andare a mettere le mani sul codice del dataset tipizzato, ma appena modifico qualcosa ovviamente si rigenera tutto perdendo ogni mia modifica.
Come faccio?
E' per questo che avevo pensato di creare nuove classi che ereditino da quelle tipizzate fatte con VS.

Come dice giustamente Ricciolo di farsi il lavoro a mano... è un suicidio. quintali di codice che richiederebbe ti farsi un proprio tool(ammesso che con questa testa ci si riesca :-) )..

consigli?

ciao e grazie
Beh, devi considerare che un conto è il nome delle tabelle e delle colonne del dataTable.
Se crei la select e un campo di sql si chiama NomeCampo mentre nel dataset si chiama Nome, basta che tu faccia
SELECT NomeCampo AS Nome
e così lo freghi, lo stesso anche per il nome della tabella.
Poi per l'aggiornamento, anche se usi il command builder, dovrebbe usare gli alias come source column, altrimenti, non usarlo che è molto meglio e fai le cose migliori.

Non è sbagliato neanche usare la classe che eredita, ma effettua i cast correttamente, es, sempre sul nome della colonna.
La classe base ha la colonna NomeCampo:
public DataColumn NomeCampo
...

la tua classe che eredita, farà
public DataColumn Campo
{
get
{
return base.NomeCampo
}

Ciao

Il mio blog
Homepage
14 messaggi dal 20 febbraio 2003
Grazie di nuovo
ora le cose cominciano a schiarirsi..
Devo pensarci sopra.

Ricciolo ha scritto:
Poi per l'aggiornamento, anche se usi il command builder, dovrebbe usare gli alias come source column, altrimenti, non usarlo che è molto meglio e fai le cose migliori.

Per il dataAdapter uso un tool(da me poi adattato per le mie esigenze) fatto da David Sceppa che ho trovato nel libro programmare ADO.NET(non voglio fare pubblicità .. per carità :-) ), che è veramente massiccio..

ci penso e ti faccio sapere

grazie e ciao!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.