Ricerca 
it-ITen-US
Registrazione
Accedi
In-Vesti Dotnetwork
IN-VESTI DNW!!!
Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta.
Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni
Effettua il pagamento usando IWBank
Click per andare alla pagina di Iscrizione
Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione.  Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt.  Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!!
.:DotNetWork Founders:.
    Stampa     


DotNetWork Forums
[ASP.NET] Gridview con progressivo
Ultimo Post 31 mar 2008 17.33 by Max. 6 Risposte.
Stampa immediata
Ordina:
PrevPrev ProssimoProssimo
Non sei autorizzato ad inviare una risposta.
Autore Messaggi

Posts:435

--
26 mar 2008 00.27  
Ciao a tutti,
ho fatto una paginetta che visualizza il fatturato in una gridview con una riga per ogni mese.

La base dati e' un dataset con una datatable generata da una stored procedure di SQL.

Avrei ora la necessita' di avere anche un propgressivo mese per mese (gennaio =gennaio, febbraio=gennaio+febbraio ecc.)

Ho pensato di usare una variabile che definisco a 0 al pageload e ad ogni evento RowCreated della gridview la incremento. Il mio problema e' pero': come la visualizzo ???? :( perdonatemi...)

oppure ciclo sulle righe restiruite dalla SP e popolo una datatable che poi uso come source della gridviev.

oppure invece di usare una gridviev uso un repeater ?

piu' in generale mi interesserebbe capire come poter gestire al meglio questi dati, visto che so gia' che poi "di sopra" vorranno vedere i dati raffrontati agli anni precedenti, poi raggruppati per anno/cliente, poi analisi ABC del fatturato ecc ecc.

Qualcuno mi indica la strada migliore ?

Grazie mille.
Max.

Posts:657

--
26 mar 2008 08.20  
Inviato da Max on 26/03/2008 01.27.17

Ciao a tutti,
ho fatto una paginetta che visualizza il fatturato in una gridview con una riga per ogni mese.

La base dati e' un dataset con una datatable generata da una stored procedure di SQL.

Avrei ora la necessita' di avere anche un propgressivo mese per mese (gennaio =gennaio, febbraio=gennaio+febbraio ecc.)

Ho pensato di usare una variabile che definisco a 0 al pageload e ad ogni evento RowCreated della gridview la incremento. Il mio problema e' pero': come la visualizzo ???? :( perdonatemi...)

oppure ciclo sulle righe restiruite dalla SP e popolo una datatable che poi uso come source della gridviev.

oppure invece di usare una gridviev uso un repeater ?

piu' in generale mi interesserebbe capire come poter gestire al meglio questi dati, visto che so gia' che poi "di sopra" vorranno vedere i dati raffrontati agli anni precedenti, poi raggruppati per anno/cliente, poi analisi ABC del fatturato ecc ecc.

Qualcuno mi indica la strada migliore ?

Grazie mille.
Max.


Come prima cosa, aggiungi una colonna (di tipo "TemplateField" in questo caso) alla GridView selezionando l'opzione "Add new column..." dello smart tag del controllo.
Dopo aggiungi un controllo al tuo template della riga:

<asp:TemplateField HeaderText="Nuova colonna">
<ItemTemplate>
<asp:Label ID="ValoreCustom" runat="server" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>

A questo punto gestisci l'evento della GridView "RowDataBound":

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//Recuperi il tuo controllo inserito nel template, tramite il suo ID
Label lbl = (Label)e.Row.FindControl("ValoreCustom");
//Indice riga corrente
int iCurr = e.Row.RowIndex;

//Se la riga è una riga che continene dati (tieni presente ad esempio che la prima riga
//che ti verrà restituita è di tipo "Header")
//Allora puoi assegnargli il valore che più ti piace.
if (e.Row.RowType == DataControlRowType.DataRow)
lbl.Text = iCurr.ToString();

}
Rudy Azzan

Posts:435

--
26 mar 2008 09.43  
Ottimo Rudy,
Veloce preciso come sempre !

Oggi provo.

Grazie mille.
Max.

Posts:435

--
31 mar 2008 14.07  
Ciao Rudy.
Stavo provando la soluzione che mi hai proposto.

C'e' pero' qualcosa che mi sfugge.

La gridview ha 2 colonne bound + la mia custom.

Mese(Mese) Euro(column1) Progressivo(Progressivo)

Io vorrei ottenere nella colonna progressivo la somma progressiva della colonna column1.

Es:
Mese euro progressivo
1 10.000 10.000
2 15.000 25.000
...

ecco il codice che ho messo nell'evento RowBound:


Progressivo e' definito a livello di form come double=0

Dim lbl As New Label
lbl = DirectCast(e.Row.FindControl("Progressivo"), Label)
Dim lbl1 As New Label
lbl1 = DirectCast(e.Row.FindControl("Column1"), Label)

Response.Write(lbl.Text & "<br>") '<--- GENERA L'ERRORE
Response.Write(lbl1.Text & "<br>")

progressivo += Convert.ToDouble(lbl1.Text)
If e.Row.RowType = DataControlRowType.DataRow Then
lbl.Text = progressivo.ToString("{0:n0}")
End If

Ottengo pero' un errore "Riferimento a un oggetto non impostato su un'istanza di oggetto" sulla riga

Response.Write(lbl.Text & "<br>")

come se lbl non esistesse...

Dove mi sbaglio ??

Grazie
Max.

Posts:657

--
31 mar 2008 15.20  
Inviato da Max on 31/03/2008 15.07.06

Ciao Rudy.
Stavo provando la soluzione che mi hai proposto.

C'e' pero' qualcosa che mi sfugge.

La gridview ha 2 colonne bound + la mia custom.

Mese(Mese) Euro(column1) Progressivo(Progressivo)

Io vorrei ottenere nella colonna progressivo la somma progressiva della colonna column1.

Es:
Mese euro progressivo
1 10.000 10.000
2 15.000 25.000
...

ecco il codice che ho messo nell'evento RowBound:


Progressivo e' definito a livello di form come double=0

Dim lbl As New Label
lbl = DirectCast(e.Row.FindControl("Progressivo"), Label)
Dim lbl1 As New Label
lbl1 = DirectCast(e.Row.FindControl("Column1"), Label)

Response.Write(lbl.Text & "
") '<--- GENERA L'ERRORE
Response.Write(lbl1.Text & "
")

progressivo += Convert.ToDouble(lbl1.Text)
If e.Row.RowType = DataControlRowType.DataRow Then
lbl.Text = progressivo.ToString("{0:n0}")
End If

Ottengo pero' un errore "Riferimento a un oggetto non impostato su un'istanza di oggetto" sulla riga

Response.Write(lbl.Text & "
")

come se lbl non esistesse...

Dove mi sbaglio ??

Grazie
Max.


Hai fatto un po' di confusione. Guarda meglio il mio esempio:
Io ho creato un controllo nel template chiamato "ValoreCustom"
Che non ha nulla a che fare col nome della colonna (nel mio caso "Nuova colonna")

<asp:TemplateField HeaderText="Nuova colonna">
<ItemTemplate>
<asp:Label ID="ValoreCustom" runat="server" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>

Durante l'evento "RowDataBound" cerco il controllo "ValoreCustom" che ho inserito io nel template prima:
Label lbl = (Label)e.Row.FindControl("ValoreCustom");

a questo punto puoi valorizzarlo:
lbl.Text = "valore";

Nel tuo caso invece:

qui cerchi un oggetto che corrisponda al nome della colonna che non esiste
lbl = DirectCast(e.Row.FindControl("Progressivo"), Label)

questo invece proprio non visto che non hai neanche inserito un template e un controllo con quel nome, ma hai preso il nome della colonna.
lbl1 = DirectCast(e.Row.FindControl("Column1"), Label)

Se vuoi trovare il valore della colonna "Column1" devi fare così:

//C#
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRow dtr = ((DataRowView)e.Row.DataItem).Row;
string descr = (string)dtr["Column1"];
}
Rudy Azzan

Posts:435

--
31 mar 2008 15.32  
Hai fatto un po' di confusione.


eheh, mi pareva strano di aver capito al volo ! :D

Adesso correggo.

Grazie !
Max.

Posts:435

--
31 mar 2008 17.33  
A futuro utilizzo dei neofiti come me:


Ecco la parte di codice che funziona. :D

<inserire nell'evento GridView1_RowDataBound>

Dim lbl As New Label
lbl = DirectCast(e.Row.FindControl("custom"), Label)

If e.Row.RowType = DataControlRowType.DataRow Then
Try
Dim dtr As Data.DataRow = DirectCast(e.Row.DataItem, Data.DataRowView).Row
Dim euro As Double = dtr.Item(1)
progressivo += euro
lbl.Text = String.Format("{0:n0}", progressivo)
Catch ex As Exception
End Try
End If

Grazie a Rudy.
Non sei autorizzato ad inviare una risposta.

Active Forums 4.1
       
Articoli
ADO.Net Nozioni di base (parte 1)
Una libreria helper base per usare comandi diretti in SQL Server
2008/03/09 | Autore: Sabrina Cosolo
Introduzione a Windows Presentation Foundation (parte1)
La prima di una serie di traduzioni da articoli di MSDN o altre fonti che offrono un punto di partenza per iniziare a capire il WPF.
2007/07/29 | Autore: Patrizia Cosolo
Briciole di ereditarietà
Come aggiungere ulteriori funzionalità alla TreeView personalizzata
2009/06/05 | Autore: Francesca Mazzoni
Fritto misto - Classi di uso comune (parte 2)
Helper: Una classe per la Serializzazione XML delle classi dati
2007/10/21 | Autore: Sabrina Cosolo
Panoramica degli Eventi Pilotati
Come iniziare a capire com'è fatto WPF (parte 4)
2007/08/14 | Autore: Patrizia Cosolo
Iniziare da zero con WPF (Parte 3)
Litigi, Divinità, Pennelli e Frigoriferi. (seconda parte)
2007/11/22 | Autore: Sabrina Cosolo
Lavorare con i Generic - Led Control
Creare un controllo che simula i moduli LED
2007/11/11 | Autore: Alberto De Luca
Copiare dati fra Database con ADO.Net
Da Qui a Li e da Li a Qui usando OleDb e Access
2009/02/14 | Autore: Sabrina Cosolo
    Stampa     
Home|Forums|Blogs|Mappa del sito
© 2007-2010 by DotNetWork  .:.  Condizioni d'uso  .:.  Privacy  .:.  Accedi  .:.