inserimento totale in gridview
marco440 non è online. Ultima attività: 11/08/2008 16.03.52marco440
Inserito il: 21 maggio 2008 10.59
77 messaggi dal 08 nov 2001 Istalla Microsoft Silverlight!
Ciao a tutti
come da oggetto devo inserire un totale fatture suddiviso per scadenza all'interno di un gridview che ha lo scopo di mostrare un riepilogo.
facendo una googlata "mi sono fatto persuaso" che il sistema migliore è creare un datatable e intervenire su di esso per aggiungere la riga "totale" questo il codice

'calcolo il totale ed il totale per scadenza==================================================================================
Dim totale As Single
Dim dataCount As New DataTable
ds.Tables("scadenze").Columns.Add("tot")
dataCount = ds.Tables("scadenze").Clone
Dim data_scad_fatt As DateTime = CDate(ds.Tables("scadenze").Rows(0).Item("data_scadenza").ToString)
Dim countRow As Int32 = 0

For Each dr As DataRow In ds.Tables("scadenze").Rows

Dim data_scad_cicle As DateTime = dr("data_scadenza").ToString
Dim importoS As Single = calcolaTotale(dr("ID").ToString)

Dim totalFormat As String
dr.Item("tot") = String.Format("{0:n2}", importoS)

totale = totale + importoS
countRow = countRow + 1
If (data_scad_fatt <> data_scad_cicle) Then
Dim newDr As DataRow = dataCount.NewRow
For count As Int32 = 0 To newDr.ItemArray.Length - 1
dataCount.Columns(count).AllowDBNull = True
Next
newDr.Item("NOMINATIVO") = "Totale del: " + data_scad_fatt.ToString("d")

totalFormat = String.Format("{0:n2}", totale - importoS)
newDr.Item("tot") = totalFormat
dataCount.Rows.InsertAt(newDr, countRow)
totale = importoS

End If
dataCount.ImportRow(dr)
data_scad_fatt = data_scad_cicle

'l'ultima scadenza
totalFormat = String.Format("{0:n2}", totale)
If countRow = ds.Tables("scadenze").Rows.Count Then
Dim newDr As DataRow = dataCount.NewRow
For count As Int32 = 0 To newDr.ItemArray.Length - 1
dataCount.Columns(count).AllowDBNull = True
Next
newDr.Item("NOMINATIVO") = "Totale del: " + data_scad_fatt.ToString("d")
newDr.Item("tot") = totalFormat

dataCount.Rows.Add(newDr)
totale = importoS

End If
Next
'==============================================================================================================================
Grid.DataSource = dataCount
Grid.DataBind()


funziona tutto (o quasi)
purtroppo se una scadenza comprende una sola fattura la riga totale viene aggiunta prima di quella della fattura stessa.

ormai è qualche giorno che ci sbatto la testa ma non riesco a venirne a capo e ormai non ho più le risorse per risolverlo. Sono sicuro che è già capitato a qualcuno di voi e sono altrettanto sicuro che si può trovare un sistema più efficiente magari eliminando anche l'ultimo controllo per l'ìultima riga. Voi come fareste?

grazie
Marco

Modificato da marco440 il 21 maggio 2008 11.00 -

Modificato da marco440 il 21 maggio 2008 11.01 -

RE: inserimento totale in gridview
manuel0081 non è online. Ultima attività: 07/08/2008 15.52.52manuel0081
Inserito il: 22 maggio 2008 09.04
blogs.ugidotnet.org / 686 messaggi dal 22 feb 2006 Istalla Microsoft Silverlight!
l'analisi del codice viene in un secondo momento.

Che significa:
"purtroppo se una scadenza comprende una sola fattura la riga totale viene aggiunta prima di quella della fattura stessa. " ?

Se ho capito bene hai problemi su quell InsertAt? Hai replicato il bug? Sei andato in debug?

Player of Age of Empires II - The Conquerors
Player of www.websoccermanager.com
RE: inserimento totale in gridview
marco440 non è online. Ultima attività: 11/08/2008 16.03.52marco440
Inserito il: 22 maggio 2008 11.07
77 messaggi dal 08 nov 2001 Istalla Microsoft Silverlight!
Ciao
Guarda non so più nemmeno io cosa fa
ho debuggato e replicato il bug ed il problema è esattamente quel insertAt
l'indice è sbagliato se una scadenza esiste solo una volta
ma ormai sono nel pallone, non ne vengo a capo
il concetto è:
devo mostrare una subtotale per scadenza all'interno di un gridview

come fare?

RE: inserimento totale in gridview
marco440 non è online. Ultima attività: 11/08/2008 16.03.52marco440
Inserito il: 22 maggio 2008 17.20
77 messaggi dal 08 nov 2001 Istalla Microsoft Silverlight!
ho risolto così

Dim totale As Single
Dim dataCount As New DataTable
ds.Tables("scadenze").Columns.Add("tot")
Dim totalFormat As String

Dim curDate As Date
Dim prevDate As Date = CDate(ds.Tables("scadenze").Rows(0).Item("data_scadenza").ToString)
Dim j As Integer = 0

Do While j <= ds.Tables("scadenze").Rows.Count - 1
Dim importoS As Single = calcolaTotale(ds.Tables("scadenze").Rows(j).Item("ID").ToString)

ds.Tables("scadenze").Rows(j).Item("tot") = String.Format("{0:n2}", importoS)
totale = totale + importoS
curDate = ds.Tables("scadenze").Rows(j).Item("data_scadenza").ToString()
If curDate <> prevDate Then

Dim newDr As DataRow = ds.Tables("scadenze").NewRow

newDr.Item("NOMINATIVO") = "Totale del: " + prevDate.ToString("d")

totalFormat = String.Format("{0:n2}", totale - importoS)
newDr.Item("tot") = totalFormat

ds.Tables("scadenze").Rows.InsertAt(newDr, j)
totale = importoS
j += 1
End If
j += 1
prevDate = curDate
Loop
'la riga totale
Dim newDrTot As DataRow = ds.Tables("scadenze").NewRow
newDrTot.Item("NOMINATIVO") = "Totale del: " + prevDate.ToString("d")
totalFormat = String.Format("{0:n2}", totale)
newDrTot.Item("tot") = totalFormat
ds.Tables("scadenze").Rows.InsertAt(newDrTot, ds.Tables("scadenze").Rows.Count)


così lavoro direttatmente sul dataset, finito il ciclo inserisco l'ultima riga
con l'ultima scadenza.

ciao


Vai a:
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.


fabrica - 1242 pt
vladimiro - 1070 pt
PeppeDotNet - 590 pt

Ultimi vincitori: PeppeDotNet, fabrica, vladimiro

Iscriviti anche tu e raccogli punti. Questo mese in palio VS 2008 + Windows Server 2008, ReShaper e 1 ebook!



COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums