Agiungere una colonna ad un datatable e aggiornare il valore di qst co...

mercoledì 20 maggio 2009 - 18.47

todero Profilo | Newbie

salve,

vorrei sapere se è possibile, aggiungere una colonna ad un oggetto datatable(contenente già dei record) e aggiornare il valore di questa colonna per le righe già presenti nell'oggetto.

Per es, avere le colonne nome e cognome nella tabella persona che contiene già 2 record, e volere aggiungere la colonna data di nascita e dunque modifricare i due record già presenti per aggiungere questa informazione.

sto lavorando in C#. Ho già provato una soluzione, ma mi duplica la riga, mantenendo una riga senza la nuova colonna ed una riga con la nuova colonna con il valore aggiornato.


accetto suggerimenti,

saluti by tod

Jeremy Profilo | Guru

Ciao Bruno.
Quello che vuoi fare è abbastanza semplice da realizzare.(se rimaniamo nell'ambito dell'applicazione, altrimenti si può fare ma è un pò più complesso.)
Fai vedere il codice che hai prodotto fino adesso che vediamo di metterlo a posto.

Facci sapere...
Ciao.

balfaz Profilo | Expert

scusa ma si tu crei un column da aggiungere al datatable e poi attraverso un "for each" fai l'aggiornamento del row selezionato, non ti funziona?, se fosse no, inviaci un po di codice per capire meglio.
Dove troverai sempre una mano disposta ad aiutarti è nell'estremo del tuo proprio braccio

todero Profilo | Newbie

ok, vi posto il codice e vediamo dove sbaglio:

ds1 = new DataSet();
ds1 = qui richiamo un web method di un web service che mi restituisce un dataset;

if(ds1.Tables[0].Rows[0]["id"] != null) // questa riga la uso per capire se mi è stato restituito un dataset senza record o meno, se avete una soluzione + elegante, sono ben lieto di impararla
{
DataColumn negozio = new DataColumn("negozio", System.Type.GetType("System.Int16");
ds1.Tables[0].Columns.Add(negozio);
ds1.Tables[0].Rows[0]["negozio"] = valore da inserire;
}
return ds1;

ora quando vado a leggere questo dataset che restituisco dal metodo, ottengo due record, il primo è il record perfettamente modificato con colonna e valore, il secondo è il record originale senza colonna nè valore.

come mai??????
grazie in anticipo, ciauzzzzzzzzzzzzzzzzz

paoval72 Profilo | Senior Member

Ciao, m'infilo anch'io visto che mi sveglio presto!!!
>ok, vi posto il codice e vediamo dove sbaglio:
>
>ds1 = new DataSet();
>ds1 = qui richiamo un web method di un web service che mi restituisce
>un dataset;
>
>if(ds1.Tables[0].Rows[0]["id"] != null) // questa riga la uso
>per capire se mi è stato restituito un dataset senza record o
>meno, se avete una soluzione + elegante, sono ben lieto di impararla
>{
>DataColumn negozio = new DataColumn("negozio", System.Type.GetType("System.Int16");
> ds1.Tables[0].Columns.Add(negozio);
> ds1.Tables[0].Rows[0]["negozio"] = valore da inserire;
>}
>return ds1;
da quanto posso vedere, il problema sta proprio nel fatto che manca il ciclo proposto da Balfaz: nel tuo codice fai il controllo sulla rows[0] e inserisci il valore nella rows[0]. ma se hai 2 o più righe, devi aggiornare anche le altre rows, eseguendo il foreach che ha detto Balfaz. Ovviamente è da premettere che dipende anche in che parte del codice fai questa add di colonna.
Riguardo al controllo sul dataset, a rigor di logica potrei prevedere buona parte degli errori possibili. Ad esempio, se il web service va in errore, il dataset sarà null e quindi anche senza tables. Perciò proporrei un ulteriore passaggio:
if(ds1!=null && ds1.Tables[0].Rows.Count>0)
Dove controllo che il dataset non sia nullo: in tal caso passo poi a vedere se la tabella che mi restituisce (se non ci sono righe mi darà comunque lo schema della tabella) ha almeno una riga.
Un saluto a tutti,
PV

todero Profilo | Newbie

forse non ho ben spiegato cosa mi viene fuori...

io ottengo un dataset che contiene due record, partendo da un dataset che ne conteneva solo uno.

Ottengo un record perfettamente modificato come voglio, ovvero nome cognome dat, tutti i campi pieni; ed ottengo un secondo record con solo nome e cognome con i dati del record originale.


come mai??? potete postarmi il vostro codice, così lo provo.


grazie, ciauzzzzzzzzzz

paoval72 Profilo | Senior Member

Provando con un mio dataset, il tuo codice mi restituisce una sola riga , con la nuova colonna. per questo ti chiedevo dove lanciavi l'add della colonna.

Puoi postare tutta la funzione o altro codice?

PV

todero Profilo | Newbie

ok, ho risolto. ho aggiunto

ds1.acceptchanges();

prima del return ed adesso il risultato è costituito da un solo record(con la colonna e il valore aggiunti).


grazie, ciauzzzzzzzzzzz

Jeremy Profilo | Guru

Ciao Bruno.
Sono contento che hai risolto, ... anche se non ha senso il modo in cui hai risolto.
Forse tu cercavi le modifiche nella tabella del database???

Ciao.

todero Profilo | Newbie

no, cercavo solo la modifica nel dataset. Mi rendo conto che questa soluzione suona assurda, appena avrò un pò di tempo libero, posterò magari il codice completo, così cerchiamo di capire cosa succede.

a presto, ciauzzzzzzzzzz
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5