ASP.NET C# - Problema con DataTable

giovedì 09 giugno 2011 - 20.11
Tag Elenco Tags  C#  |  .NET 3.5  |  Visual Studio 2005  |  SQL Server 2005

MaryAnn Profilo | Newbie

Ciao a tutti.
Sto effettuando delle modifiche ad un sito.
In una pagina c'è una GridView caricata attualmente tramite un dataset.
Questo dataset è implementato da una query SQL.

Ho necessità di creare una datatable con i valori trasposti del dataset, ovvero portare le righe in colonne e viceversa e caricare il GridView in questo modo.

Anticipo che non posso modificare la query (o almeno non mi conviene perché il dataset nel quale viene caricato viene utilizzato da molti grafici e altre tabelle..quindi preferirei lasciarlo in questo modo).

La soluzione mi sembrava molto semplice..

Per andare sul concreto, attualmente il tutto funziona così:

myGridView.DataSource = myDs.Tables[0];
myGridView.DataBind();

Io invece ho creato un datatable, nel quale ciclando carico le righe del dataset nelle colonne dal datatable e carico quindi il GridView con la mia nuova tabella.
Il tutto funziona a meraviglia tranne che per un problema:

Il mio dataset originale restituisce del valori di tipo Double. (object{double})
Ma quando vado a riportarli nel datatable non ho modo di trasformarli in Double, ma restano di tipo Object String.

Ho provato a fare convert, parse etc.. ho anche provato ad appoggiare i valori dentro variabili di tipo Double ma niente..

Inutile dire che mi servono in Double quei valori perché mi servono per effettuare delle operazioni e successivamente devo fare degli arrotondamenti in fase di visualizzazione.

Preciso che non tutti i valori sono double, ovvero le intestazioni delle colonne e i valori della prima colonna sono stringhe.

la tabella insomma è così:

string | string | string | string | string | <--INTESTAZIONE
string | double | double | double | double |
string | double | double | double | double |
string | double | double | double | double |
string | double | double | double | double |

In ogni caso quando ciclo ho fatto in modo di caricare prima l'intestazione, poi la prima colonna e con un ciclo a parte i valori double, per poter fare la conversione.

Non riesco proprio a capire perché il dataset caricato da query SQL è corretto, se creo una copia del dataset o lo copio in una tabella mi mantiene la tipologia di tutti i valori.. mentre se provo a replicare un dataset, o un datatable o anche solo un datarow.. perdo la tipologia double.

Qualche suggerimento? Mi sfugge qualcosa?
Grazie mille a tutti!

Ho risolto.. impostando il typeof(double) quando faccio ADD della colonna.. mi era proprio sfuggito!

Gluck74 Profilo | Guru

Se non ho capito male, devi girare la tabella di 90 gradi:

prodotto costo qta totale
carne 5,00 2 10,00
pesce 7,00 3 21,00
frutta 1,00 1 1,00

diventa

prodotto carne pesce frutta
costo 5,00 7,00 1,00
qta 2 3 1
totale 10,00 21,00 1,00


Puoi farlo con ListView.
Questo controllo ti pemette di fare una visualizzazione a colonne, utilizzando la stessa identica tabella che usi per una gridview con visualizzazione a righe:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Giocando un poco con gli stili, viene fuori un bel lavoretto.
Ciao

____________
http://blogs.dotnethell.it/glucolo
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5