Stampe crystal report con visual studio 2008

venerdì 26 giugno 2009 - 16.28

Mau67 Profilo | Expert

Ciao al forum, fino ad oggiho usato crystal report passando i dati tramite select di dati presi dal database, adesso ho la necessita di passare i dati presi esclusivamente dalle listview senza passare per il database, e passargli le righe selezionata dal checkbox.

Mi sapete dire come devo fare ah non sono molto esperto quindi se potreste farmi qualche esempio pi ringrazio

Ciao a tutti

Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Neanche a farlo apposta ... devi popolare una nuova istanza della datatable creata in fase di progettazione del report e passarla al cristalreportviewer con il metodo SetDataSource.

Facci sapere...
Ciao

Mau67 Profilo | Expert

Ciao Jeremy ok ti va di cominciare a costruire un report?

Ciao grazie
Mau67

Jeremy Profilo | Guru

dimmi tutto.

Mau67 Profilo | Expert

Allora Jeremy il report da costruire è il risultato delle listview che mi hai aiutato a costruire, e cioè
Ricordi la listview2? bene da quella select io devo filtrare il campo dal in con la select della listview1 in questo modo:

Dal =< Al (dove dal e nella select della listview2 e il campo al e nella select della listview1), da qui il risultato dei record trovati deve sommarli e fare i totali in anni mesi e giorni e memorizzarli sul report questo il primo passo poi dobbiamo mettre delle variabili che in base hai campi delle colonne della listview2 trova degli importi e effettua dei calcoli e li memorizza nel report

questo a grandi linee quello che mi serve chiedi man mano i vari passaggi
Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Ma il report lo hai già progettato???
Se si .... in che modo? (intendo a quante DataTable hai fatto riferimento nel Report? e come sino strutturate?)

Facci sapere...
Ciao

Mau67 Profilo | Expert

No veramente non lo progettato pensavo di poterlo fare insieme, perchè non so come si fà, e speravo mi dessi una dritta su che tipologia di report usare se crystal o word o excell ecc.
Ciao

Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Senza dubbio CrystalReport ....

Mau67 Profilo | Expert

Ok vuoi guidarmi per costruire il primo report?
Mau67

Jeremy Profilo | Guru

Si ... siamo qui ....
ma devi fare delle domande specifiche riguardo a quello che non ti riesce fare .... comincia ad inserire il report nel tuo progetto e strutturarlo secondo le tue esigenze .... qualsiasi cosa non ti riesca fare (dopo moderati tentativi) chiedi pure .... noi siamo qui
Facci sapere....
Ciao

Mau67 Profilo | Expert

Ok ragazzi ho bisogno di auto, allora ho strutturato il mio report e devo inserire nella sezione (dettagli) uno dei campi che saranno il risultato dei totali di anni mesi e giorni vi posto il codice di come passo i dati al report:

Private Sub Report_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If Not File.Exists(FILE_NAME) Then
MsgBox(FILE_NAME & " Stringa di connessione mancante.")
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim sqlString As String
sqlString = sr.ReadLine()
Me.ToolStripStatusLabel2.Text = (sqlString) 'Questo è solo per verificare!
sr.Close()

Dim objConnection As New SqlConnection(sqlString)
Dim data As Date = Microsoft.VisualBasic.DateValue(Now)

'--- riempio la tabella
Dim tabella, tabella1, tabella2, tabella3 As New DataTable

Dim miaDataAdapter As New SqlDataAdapter("SELECT ID,CodiceFiscale, Categoria, Grado, Cognome," & _
"Nome, LuogoNascita, ProvNascita, DataNascita," & _
"Indirizzo, Comune, ProvResidenza," & _
"Cap, DataArruolamento, DataCongedo," & _
"DataRiarruolamento, DataArruolamentoVirtuale, Posizione, Omogenizzazione," & _
"Banca, Agenzia, IndirizzoBanca, Città, ProvBanca, CapBanca," & _
"Paese, ChekDigit, Cin, Abi, Cab, CC FROM Anagrafica WHERE ID = '" & m_ParametroIDAna & "'", objConnection)
miaDataAdapter.Fill(tabella)



miaDataAdapter.SelectCommand.CommandText = "SELECT ID, IDAna, Dal, Operativa FROM Operativa WHERE IDAna = '" & m_ParametroIDAna & "'"
miaDataAdapter.Fill(tabella1)

Dim mioreport As New ReportDocument

'--- carico 1oggetto repotr e gli seto le tabelle sorgenti
mioreport.Load(AppDomain.CurrentDomain.BaseDirectory + "\Report\rptAttoDispositivo.rpt")
mioreport.Database.Tables(0).SetDataSource(tabella)
mioreport.Database.Tables(1).SetDataSource(tabella1)



CrystalReportViewer1.ReportSource = mioreport
End Sub


devo filtrare i dati nella tabella con il campo (<Dal) come la select seguente
miaDataAdapter.SelectCommand.CommandText = "SELECT ID, IDAna, Dal, Operativa FROM Operativa WHERE IDAna = '" & m_ParametroIDAna & "'"
miaDataAdapter.Fill(tabella1)

Con il campo (Trascinamenti.Al) della select seguente:

Dim sql As String = "SELECT Trascinamenti.ID, Trascinamenti.TipoOp, Reparti.Reparto + ' ' + Reparti.Città AS Reparto, Trascinamenti.Dal, Trascinamenti.Al FROM Reparti INNER JOIN Trascinamenti ON Reparti.ID = Trascinamenti.Reparto WHERE IDAna = '" & ComboBox1.SelectedValue & "' order by Dal"


adesso per fare i calcoli degli anni mesi e giorni e inserire solo i totali nel repot dovrei fare una cosa del genere come abbiamo fatto nel form con la listview :

Dim datTim1 As Date
Dim datTim2 As Date

datTim1 = Date.Parse(thisReader.Item(3).ToString)
datTim2 = Date.Parse(thisReader.Item(4).ToString)

Index += 0


''Posiziono i risultati della datediff in base a TipoOp
''=================================================
Select Case thisReader("TipoOp").ToString
Case "NU"
Case "UM"
For i As Integer = 0 To 2
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "CA"
For i As Integer = 0 To 5
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next

Case "SC"
For i As Integer = 0 To 8
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "TA"
For i As Integer = 0 To 11
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "PA"
For i As Integer = 0 To 14
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "AN1"
For i As Integer = 0 To 17
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "AN2"
For i As Integer = 0 To 20
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "MU"
For i As Integer = 0 To 23
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
End Select

'ANNI
Dim wY As Long
wY = DateDiff("yyyy", datTim1, datTim2)
If datTim2 < DateSerial(datTim2.Year, datTim1.Month, datTim1.Day) Then
wY = wY - 1
item.SubItems.Add(wY.ToString)
End If
item.SubItems.Add(wY.ToString)
Totali(Index) += wY
Index += 1
'--------------------------------
'MESI
Dim wM As Long
wM = DateDiff("m", datTim1, datTim2)
wM = wM - (wY * 12)
If DatePart("d", datTim1) > DatePart("d", datTim2) Then
wM = wM - 1
item.SubItems.Add(wM.ToString)
End If
item.SubItems.Add(wM.ToString)
Totali(Index) += wM
'QUESTO L'HO AGGIUNTO IO
'=================================
If Totali(Index) > 11 Then
Totali(Index) -= 12
Totali(Index - 1) += 1
End If
'=================================
Index += 1
'--------------------------------
'GIORNI
Dim GiornoInizio As Int32
Dim GiornoFine As Int32
Dim wD As Long
Dim TempGiornoInizio As Date
GiornoInizio = DatePart("d", datTim1)
GiornoFine = DatePart("d", datTim2)
If GiornoFine >= GiornoInizio Then
wD = GiornoFine - GiornoInizio + 1
item.SubItems.Add(wD.ToString)
Else
TempGiornoInizio = DateAdd("m", -1, datTim2)
wD = DateDiff("d", TempGiornoInizio, datTim2) - (GiornoInizio - GiornoFine) + 1
item.SubItems.Add(wD.ToString)
End If
'QUESTO L'HO AGGIUNTO IO
'=================================
Totali(Index) += wD
If Totali(Index) > 29 Then
Totali(Index) -= 30
Totali(Index - 1) += 1
If Totali(Index - 1) > 11 Then
Totali(Index - 1) -= 12
Totali(Index - 2) += 1
End If
End If
'=================================

Index += 1

ListView1.Items.Add(item)

End While

come faccio per inserire solo i totali? ciao e grazie


Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Devi innanzitutto creare la struttura dati del report .... quindi devi creare,all'interno di un dataset, 2 datatable .... uno conterrà i dettagli (anni,giorni,mesi) e l'altro conterrà i totali.
Si sarebbe potuto fare anche tutto solo con il primo datatable, ma visto che il calcolo dei totali è qualcosa di più elaborato del solito....conviene crearne uno parte e popolarlo da codice.

Facci sapere...
Ciao

Mau67 Profilo | Expert

Ciao Jeremy potresti darmi una mano a costruire i dataset e datable perchè non lo mai fatto e non so da dove cominciare, sai sono un principiante anche se non sembra.

Ciao grazie
Mau67

Jeremy Profilo | Guru

Ciao Mauro.
E' semplicissimo ..... inizia aggiungendo al tuo progetto un nuovo DataSet (Tasto destro sul nome del progetto--->Aggiungi nuovo elemento---->Dataset).
Si aprirà un Wizard (o forse no .... non ricordo) ..... annullalo.
Apri il dataset in progettazione (2 volte click sul dataset) e dalla casella degli strumenti prelevi un DataTable e lo trascini all'interno della finestra di progettazione.
Adesso gli aggiungi nuove colonne (Tasto destro sulla DataTable--->Nuova colonna) ..... e il tuo Dataset è fatto.

Ad ogni modo .... noi siamo qui.
Facci sapere...
Ciao

Mau67 Profilo | Expert

Ok fatto dataset e datatable adesso per popolarlo con i dati e i totali che servono a me come faccio?
grazie
Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Per come hai organizzato la tua applicazione, sei costretto a popolare le datatable a "manina" quindi, dovresti riprendere quel codice che abbiamo modificato nell'altro post, ed adattarlo per popolare la datatable.
Ora, non posso dedicarti molto tempo, ma se non hai fretta .... per domani, vedo di produrre qualcosa io ..... se ci arrivi prima tu .... tanto meglio (per te).

Ciao

Mau67 Profilo | Expert

Ciao Jeremy scusa ma provo e riprovo ma non riesco mi serve un tuo intervento grazie

Ciao
Mau67

Mau67 Profilo | Expert

Ok Jeremy ho fatto questo:


miaDataAdapter.SelectCommand.CommandText = "SELECT Trascinamenti.ID, Trascinamenti.TipoOp, Reparti.Reparto + ' ' + Reparti.Città AS Reparto, Trascinamenti.Dal, Trascinamenti.Al FROM Reparti INNER JOIN Trascinamenti ON Reparti.ID = Trascinamenti.Reparto WHERE IDAna = '" & m_ParametroIDAna & "' order by Dal"

Dim ds As DataSet = New DataSet("TotaliTrascinamento")
Dim dt As DataTable = New DataTable("Trascinamenti")
Dim colonna As DataColumn = New DataColumn
Dim colonna1 As DataColumn = New DataColumn
Dim colonna2 As DataColumn = New DataColumn
Dim colonna3 As DataColumn = New DataColumn
Dim colonna4 As DataColumn = New DataColumn
Dim colonna5 As DataColumn = New DataColumn

colonna.DataType = System.Type.GetType("System.String")
colonna.AllowDBNull = False
colonna.Caption = "ID"
colonna.ColumnName = "ID"
colonna.DefaultValue = "-"
dt.Columns.Add(colonna)

colonna1.AllowDBNull = False
colonna1.Caption = "IDAna"
colonna1.ColumnName = "IDAna"
colonna1.DefaultValue = "-"
dt.Columns.Add(colonna1)

colonna2.AllowDBNull = False
colonna2.Caption = "TipoOp"
colonna2.ColumnName = "TipoOp"
colonna2.DefaultValue = "-"
dt.Columns.Add(colonna2)

colonna3.AllowDBNull = False
colonna3.Caption = "Reparo"
colonna3.ColumnName = "Reparto"
colonna3.DefaultValue = "-"
dt.Columns.Add(colonna3)

colonna4.AllowDBNull = False
colonna4.Caption = "Dal"
colonna4.ColumnName = "Dal"
colonna4.DefaultValue = "-"
dt.Columns.Add(colonna4)

colonna5.AllowDBNull = False
colonna5.Caption = "Al"
colonna5.ColumnName = "Al"
colonna5.DefaultValue = "-"
dt.Columns.Add(colonna5)

ds.Tables.Add("Trascinamenti")

Dim row As DataRow

Dim i As Integer
row = dt.NewRow
row("id") = i
row("IDAna") = "IDAna" & i
dt.Rows.Add(row)

Dim row1 As DataRow
row1 = dt.NewRow
row1("TipoOp") = "TipoOp" & i
dt.Rows.Add(row1)

Dim row2 As DataRow
row2 = dt.NewRow
row2("Reparto") = "Reparto" & i
dt.Rows.Add(row2)

Dim row3 As DataRow
row3 = dt.NewRow
row3("Dal") = "Dal" & i
dt.Rows.Add(row3)

Dim row4 As DataRow
row4 = dt.NewRow
row4("Al") = "Al" & i
dt.Rows.Add(row4)

miaDataAdapter.Fill(tabella2)

e riesco a trasportare i dati nel report però non riesco a calcolare i totali col metodo della modifica del form come questo

Dim datTim1 As Date
Dim datTim2 As Date

datTim1 = Date.Parse(thisReader.Item(3).ToString)
datTim2 = Date.Parse(thisReader.Item(4).ToString)

Index += 0


''Posiziono i risultati della datediff in base a TipoOp
''=================================================
Select Case thisReader("TipoOp").ToString
Case "NU"

Case "UM"
For i As Integer = 0 To 2
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "CA"
For i As Integer = 0 To 5
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next

Case "SC"
For i As Integer = 0 To 8
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "TA"
For i As Integer = 0 To 11
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "PA"
For i As Integer = 0 To 14
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "AN1"
For i As Integer = 0 To 17
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "AN2"
For i As Integer = 0 To 20
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
Case "MU"
For i As Integer = 0 To 23
item.SubItems.Add(New ListViewItem.ListViewSubItem)
Index += 1 '<----- QUESTO L'HO AGGIUNTO IO
Next
End Select

'ANNI
Dim wY As Long
wY = DateDiff("yyyy", datTim1, datTim2)
If datTim2 < DateSerial(datTim2.Year, datTim1.Month, datTim1.Day) Then
wY = wY - 1
item.SubItems.Add(wY.ToString)
End If
item.SubItems.Add(wY.ToString)
Totali(Index) += wY
Index += 1
'--------------------------------
'MESI
Dim wM As Long
wM = DateDiff("m", datTim1, datTim2)
wM = wM - (wY * 12)
If DatePart("d", datTim1) > DatePart("d", datTim2) Then
wM = wM - 1
item.SubItems.Add(wM.ToString)
End If
item.SubItems.Add(wM.ToString)
Totali(Index) += wM
'QUESTO L'HO AGGIUNTO IO
'=================================
If Totali(Index) > 11 Then
Totali(Index) -= 12
Totali(Index - 1) += 1
End If
'=================================
Index += 1
'--------------------------------
'GIORNI
Dim GiornoInizio As Int32
Dim GiornoFine As Int32
Dim wD As Long
Dim TempGiornoInizio As Date
GiornoInizio = DatePart("d", datTim1)
GiornoFine = DatePart("d", datTim2)
If GiornoFine >= GiornoInizio Then
wD = GiornoFine - GiornoInizio + 1
item.SubItems.Add(wD.ToString)
Else
TempGiornoInizio = DateAdd("m", -1, datTim2)
wD = DateDiff("d", TempGiornoInizio, datTim2) - (GiornoInizio - GiornoFine) + 1
item.SubItems.Add(wD.ToString)
End If
'QUESTO L'HO AGGIUNTO IO
'=================================
Totali(Index) += wD
If Totali(Index) > 29 Then
Totali(Index) -= 30
Totali(Index - 1) += 1
If Totali(Index - 1) > 11 Then
Totali(Index - 1) -= 12
Totali(Index - 2) += 1
End If
End If
'=================================

Index += 1

ListView1.Items.Add(item)

End While

Dim TotItem As New ListViewItem
For i = 0 To 3
TotItem.SubItems.Add(New ListViewItem.ListViewSubItem)
Next
For Each tot As Long In Totali
If tot >= 0 Then
TotItem.SubItems.Add(tot.ToString)
Else
TotItem.SubItems.Add(New ListViewItem.ListViewSubItem)
End If
Next

ListView1.Items.Add(TotItem)

Ecco qui proprio non riesco mi servirebbe il tuo intervento Grazie Ciao
Mau67

Jeremy Profilo | Guru

Ok ... dammi tempo stasera.
Ciao

Mau67 Profilo | Expert

Ok grazie
Mau67

Jeremy Profilo | Guru

Ciao mauro.
Ho dato un occhio al tuo codice ...... non ci sto capendo più nulla!!
Allora .... comincia a modificare questa parte di codice (la quale tu dici che ti permette di visualizzare i dati nel Report)
Dim ds As DataSet = New DataSet("TotaliTrascinamento") Dim dt As DataTable = New DataTable("Trascinamenti") Dim colonna As DataColumn = New DataColumn Dim colonna1 As DataColumn = New DataColumn Dim colonna2 As DataColumn = New DataColumn Dim colonna3 As DataColumn = New DataColumn Dim colonna4 As DataColumn = New DataColumn Dim colonna5 As DataColumn = New DataColumn colonna.DataType = System.Type.GetType("System.String") colonna.AllowDBNull = False colonna.Caption = "ID" colonna.ColumnName = "ID" colonna.DefaultValue = "-" dt.Columns.Add(colonna) colonna1.AllowDBNull = False colonna1.Caption = "IDAna" colonna1.ColumnName = "IDAna" colonna1.DefaultValue = "-" dt.Columns.Add(colonna1) colonna2.AllowDBNull = False colonna2.Caption = "TipoOp" colonna2.ColumnName = "TipoOp" colonna2.DefaultValue = "-" dt.Columns.Add(colonna2) colonna3.AllowDBNull = False colonna3.Caption = "Reparo" colonna3.ColumnName = "Reparto" colonna3.DefaultValue = "-" dt.Columns.Add(colonna3) colonna4.AllowDBNull = False colonna4.Caption = "Dal" colonna4.ColumnName = "Dal" colonna4.DefaultValue = "-" dt.Columns.Add(colonna4) colonna5.AllowDBNull = False colonna5.Caption = "Al" colonna5.ColumnName = "Al" colonna5.DefaultValue = "-" dt.Columns.Add(colonna5) ds.Tables.Add("Trascinamenti") Dim row As DataRow Dim i As Integer row = dt.NewRow row("id") = i row("IDAna") = "IDAna" & i dt.Rows.Add(row) Dim row1 As DataRow row1 = dt.NewRow row1("TipoOp") = "TipoOp" & i dt.Rows.Add(row1) Dim row2 As DataRow row2 = dt.NewRow row2("Reparto") = "Reparto" & i dt.Rows.Add(row2) Dim row3 As DataRow row3 = dt.NewRow row3("Dal") = "Dal" & i dt.Rows.Add(row3) Dim row4 As DataRow row4 = dt.NewRow row4("Al") = "Al" & i dt.Rows.Add(row4) miaDataAdapter.Fill(tabella2)
con questa parte di codice:
Dim TotTrascinamenti As New DataTableTotaliTrascinamento Dim Trascinamenti As New DataTableTrascinamenti miaDataAdapter.Fill(Trascinamenti)
dove, DataTableTrascinamenti è la datatable che hai creato in progettazione DataSet.
In questo modo dovremmo aver fatto già un pò più di ordine.

Poi, sarebbe utile che tu mostrassi uno screenshot del contenuto del dataset, per capire come hai progettato la DataTable TotaliTrascinamenti.
Questo, dovrebbe aiutarmi a capire anche come hai strutturato il Report riguardo alla visualizzazione dei totali.
Ti avviso che, se non risolviamo entro 3 o 4 post, dovrai mandarmi il progetto via mail cosi che possa metterlo a posto una volte per tutte .... ormai, più che un aiuto a risolvere un problema sta diventando uno sviluppo in team ..... tra l'altro fatto male perchè non riusciamo a capirci.
Non fraintendermi, ti do tutta la disponibilità che posso, più che volenteri (ho deciso io di farlo), ma se questa fosse a beneficio di qualcuno.....invece, così non ci capisci nulla tu e non ci capisco nulle neanche io.
Concordi?

Facci sapere....
Ciao




Mau67 Profilo | Expert

Ok Jeremy ti allego il progetto

Dimenticavo se la somma di tutti gli Anni, mesi e giorni sono uguali a 20 anni non mi deve permettere più di inserire record nell'allegato 12

Mau67

Mau67 Profilo | Expert

Questo allegato è quello che intendo ricavare nel report

Ciao e grazie
Mau67

Jeremy Profilo | Guru

Ok Mauro.
Ti faccio sapere....

Jeremy Profilo | Guru

Ciao Mauro.
Fammi capire ancora una cosa.
Il report che hai già costruito tu ..... quello non centra niente con quello che devi fare ..... giusto???
In definitiva, la stampa risulterà una sola tabella con il totali per le operative interessate in tutti i record flaggati nel listview2 .... giusto????? Più l'elenco dei record flaggati.


Jeremy Profilo | Guru

Ciao Mauro.
Dagli un occhio.
Sicuramente c'è qualche errore ... ma senza sorgente dati non posso debuggarlo ..... per lo meno partiamo da un qualcosa di comune.
Inoltre, non sono neanche tanto sicuro di aver capito bene l'obbiettivo, pertanto, fai pure le tue considerazioni.
Spero di essermi quanto meno avvicinato.

Facci sapere....
Ciao

Mau67 Profilo | Expert

Cuao Jeremy scusa se non ti ho risposto prima, ma i miei doveri di marito mi impongono alcuni doveriuno di questi è dipingere casa, a parte questo
ho visto il lavoro che hai fatto ma non riesco a visualizzare il report in quanto in questo punto:

For Each Trasc As DsReport.TrascinamentiRow In DsReport.Trascinamenti.Rows
Dim Data1 As Date = Date.Parse(Trasc.Dal.ToString) <<<<<<<<<<<<<<< qui mi da il seguente ERRORE


Stringa non riconosciuta come DateTime valido. Rilevata parola sconosciuta con inizio in corrispondenza dell'indice 0.

Ciao grazie



Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Forse ho interpretato male io .... ma io mi aspetto che nel campo Dal ci sia una data ..... se così non fosse ....fammi sapere.
Ad ogni modo, metti un break point su quella riga e prova a verificare il valore di Trasc.Dal.ToString.

Eventualmente, potresti includerla in costrutto Try .... EndTry per gestire l'eccezione .... ma a quel punto decadrebbe tutto il discorso dei calcoli.


Facci sapere...
Ciao

Mau67 Profilo | Expert

Si nel campo dal c'è una data e con questa data deve calcolare i totali in anni mesi e giorni di tutti i periodi che trova nella tabella allegato 12


Se guardi il codice contenutu nella Private Sub ListView_Select() vedrai che in questo punto:

item.SubItems.Add(thisReader.Item(3).ToString) <<<<<<<<< QUI C'E' una data chiamato campo Dal
item.SubItems.Add(thisReader.Item(4).ToString) <<<<<<<<< QUI C'E' una data chiamato campo Al


io devo filtrare da Qui che è un campo data

Private Sub PopolaDataset()
item.SubItems.Add(Row("Dal").ToString) <<<<<<<<< CAMPO DATA

in questo modo

item.SubItems.Add(thisReader.Item(4).ToString) < item.SubItems.Add(Row("Dal").ToString)

Non so se sono stato chiaro

Ciao


Mau67

Jeremy Profilo | Guru

Mauro.
Prova a modificare queste righe di codice
Dim Data1 As Date = Date.Parse(Trasc.Dal.ToString) Dim Data2 As Date = Date.Now
con
Dim Data1 As DateTime = DateTime.Parse(Trasc.Dal.ToString) Dim Data2 As DateTime = DateTime.Now
anche se non credo sia questo il problema.
Rimane il fatto che senza sorgente dati è impossibile per me fare il Debug, pertanto, lo devi fare tu.
Per questo è importante che tu metta un break point sulla riga che solleva l'eccezione e che verifichi il valore che ti ho indicato prima.

facci sapere...
Ciao

Mau67 Profilo | Expert

No il problema non è quello ho fatto così ho sostiito questo

For Each Id As ListViewItem In ListView2.Items
If Id.Checked = True Then
Dim RowTrascRow As DsReport.TrascinamentiRow
RowTrascRow = DsReport.Trascinamenti.NewRow
RowTrascRow.Id = Id.Text
RowTrascRow.IdAMM = Id.SubItems(0).Text
RowTrascRow.Dal = Id.SubItems(1).Text
RowTrascRow.Operativa = Id.SubItems(2).Text
DsReport.Trascinamenti.Rows.Add(RowTrascRow)
End If
Next

con questo

For Each Id As ListViewItem In ListView2.Items
If Id.Checked = True Then
Dim RowTrascRow As DsReport.TrascinamentiRow
RowTrascRow = DsReport.Trascinamenti.NewRow
RowTrascRow.Id = Id.Text
RowTrascRow.IdAMM = Id.SubItems(1).Text <<<<<<QUI
RowTrascRow.Dal = Id.SubItems(2).Text<<<<<<<<QUI
RowTrascRow.Operativa = Id.SubItems(3)Text<<<<<<<QUI
DsReport.Trascinamenti.Rows.Add(RowTrascRow)
End If
Next

adesso apre il report ma non vedo alcun record dentro la tabella ANNI MESI GIORNI è bianca non ci sono TOTALI

Ciao
Mau67

Jeremy Profilo | Guru

Prova a sostituire questa parte di codice sicuramente sbagliata(è una certezza):
Dim TotTrascRow As DsReport.TotaliTrascinamentiRow TotTrascRow = DsReport.TotaliTrascinamenti.NewRow For i As Integer = 0 To 5 If TotaleGiorni(i) > 0 And TotaleMesi(i) > 0 And TotaleAnni(i) > 0 Then TotTrascRow.Operativa = DirectCast(i, Operative).ToString TotTrascRow.TotaleAnni = TotaleAnni(i) TotTrascRow.TotaleMesi = TotaleMesi(i) TotTrascRow.TotaleGiorni = TotaleGiorni(i) DsReport.TotaliTrascinamenti.Rows.Add(TotTrascRow) End If Next

con questa:
For i As Integer = 0 To 5 Dim TotTrascRow As DsReport.TotaliTrascinamentiRow TotTrascRow = DsReport.TotaliTrascinamenti.NewRow TotTrascRow.Operativa = DirectCast(i, Operative).ToString TotTrascRow.TotaleAnni = TotaleAnni(i) TotTrascRow.TotaleMesi = TotaleMesi(i) TotTrascRow.TotaleGiorni = TotaleGiorni(i) DsReport.TotaliTrascinamenti.Rows.Add(TotTrascRow) next

ed eventualmente prova a debuggarla per verificare che la DataTable vanga davvero popolata.

Facci sapere....
Ciao

Mau67 Profilo | Expert

QUi va in errore Dim TotTrascRow As DsReport.TotaliTrascinamentiRow

mi dice la variabile 'TotTrascRow' nasconde una variabile in un blocco di inclusione

Ho tolto questo Dim TotTrascRow As DsReport.TotaliTrascinamentiRow

vàin esecuzione ma non riepiloga i dati che servono a me
Deve riepilogare i dati della tabella Trascinamenti filtrati dalla data della listview2 campo dal

ciao
Mau67

Jeremy Profilo | Guru

Quella riga non puoi toglierla .... è la dichiarazione della riga che conterrà i valori da aggiungere alla datatable.
Sinceramente .... errore od avviso che sia ..... lo da solo a te!!
Se hai fatto delle modifiche al mio codice ..... puoi ripostarmi lo zip....così che possa verificare?
Se riesci ad allegarmi anche la sorgente dati con dei valori di esempio sarebbe fantastico .... e verremmo fuori da quello che sta diventando il duomo di Milano. .

Ciao

Mau67 Profilo | Expert

La sorgente dati è dentro la cartella database che trovi nella cartella debug del progetto che mi hai allegato (1095)

ciao
Mau67

Jeremy Profilo | Guru

Oooops .... non mi ero accorto .... e tu me lo dici solo ora???.
Ok ... domani ti dico.
Ciao.

Mau67 Profilo | Expert

ok notte
Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Scusa l'ora tarda .... ma non potevo non seguire il programma su rai tre di questa sera .

Dai un occhio al progetto in allegato.
Effettivamente c'erano un mucchio di errori.
Adesso come adesso il codice non è bello ..... ma tu valuta solo il risultato .... poi, eventualmente, ti posso aiutare a sistemarlo.

facci sapere....
ciao

Mau67 Profilo | Expert

Ciao Jeremy, ti ringrazio per la tua disponibilità, il codice nel progetto và bene in parte perchè non ottengo la stampa con i dati che servono a me.
Sai capire cosa un'altra persona vuole ottenere scrivendo su un post è difficile e me ne rendo conto allora ti allego un foglio word dove ho impresso quello che voglio ottenere nella stampa.

Ciao spero di essere stato più chiaro


Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Adesso ho capito (o almeno credo) .... effettivamente, se noti, datTim2 l'ho valorizzata con la data attuale, proprio perchè non avevo capito come altro doveva essere valorizzata.
Adesso è tutto più chiaro e, come al solito, ti chiedo un po di tempo per lavorarci su.
Oggi sono su Modena fino a sera, per domani vedo di aggiornarti.

Ciao.

Jeremy Profilo | Guru

Ciao Mauro.
Non mi mandare al diavolo .... ma non è che puoi comporre un "finto report" su Word per farmi capire quali dati e come li vuoi visualizzare nel Report facendo riferimento ai dati che sono presenti nello screenshot che mi hai mandato?
Ti chiedo scusa ma sono un pò tardo a capire ..... probabilmente perchè non ho l'idea dello scenario.

Ciao.

Mau67 Profilo | Expert

Ecco allegato il finto report spero sia abbastanza chiaro.

Ciao
Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Il codice è una schifezza, la struttura del progetto peggio..... ma quello si può sistemare quando lo si vuole .... comincia a vedere se il risultato è corretto.
Nel progetto troverai 2 Report (Report1 e Report2) .... prova a visualizzarli tutti e due.
Se va bene, appena ho un po di tempo, sistemo tutto il codice.

Facci sapere....
Ciao

Mau67 Profilo | Expert

Ok Jeremy obbiettivo centrato

C' è da sistemare 3 cose ed è perfetto, ti allego foglio word così li vedi visivamente, è da un pò che provo senza risultati.

Ciao Grazie
Mau67

Jeremy Profilo | Guru

>Ok Jeremy obbiettivo centrato
Ti prego ..... dimmi che non stai scherzando

>C' è da sistemare 3 cose ed è perfetto, ti allego foglio word
>così li vedi visivamente, è da un pò che provo senza risultati.
Ok .... ti faccio sapere.
Ciao

Mau67 Profilo | Expert

No non stò scherzando.

Una cosa perchè quando seleziono le checkbox mi duplica le i totali? ti allego file per vedere.

Mau67

Jeremy Profilo | Guru

>Una cosa perchè quando seleziono le checkbox mi duplica le i
>totali?
Mi sembrava troppo bello!
In che senso??
Quale CheckBox??
Quelle del ListView2???
Se si .... è perchè mi sembrava di aver capito che per ogni Item checkkato dovesse creare una tabella di totali ..... sbaglio?

Mau67 Profilo | Expert

si quelli della listview2, e si ogni checkbox deve creare una tabella ma non consecutiva perchè tra una tabella e un altra devo inserire altri dati.

Ciao


Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Prova a vedere se c'è ancora qualcosa che non va
Ciao

Mau67 Profilo | Expert

ti allego file dopo queste modifiche il duomo di milano è finito

Prenditela con calma ci risentiamo tra una settimana, domani vado in ferie

Ciao e buone ferie anche a te
Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Il link dell'allegato è errato.

Mau67 Profilo | Expert

Ciao Jeremy ecco il file allegato.

Oltre alle modifiche del file ho riscontrato dopo la divisione per due degli UTILI A META' i totali dei mesi non li calcola più esattamente ho controllato il codice precedente senz i parziali ed ho riscontrato che in questo codice :

'QUESTO L'HO AGGIUNTO IO
'=================================
Totali(Index) += wD <<<<<<<<<<< c'è questo in più
If Totali(Index) > 29 Then
Totali(Index) -= 30
Totali(Index - 1) += 1
If Totali(Index - 1) > 11 Then
Totali(Index - 1) -= 12
Totali(Index - 2) += 1
End If
End If

ho provato ad aggiungerlo nel codice che hai modificato il risultato è che anni e mesi li calcola giusti ma i giorni li calcola a metà

puoi dare un occhiata?

Ciao grazie
Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Dammi tempo di riprendere un attimo il filo del discorso.
Ciao

Mau67 Profilo | Expert

Ok Jeremy fai pure
Ciao Grazie
Mau67

Jeremy Profilo | Guru

Ciao Mauro.
Perdonami ma, riguardando il progetto, per quanto riguarda il Report, mi sembra tutto a posto.

Potresti allegare il progetto attuale, cosi da non ricominciare un'altro duomo?

Ciao

Mau67 Profilo | Expert

Ciao Jeremy, il progetto che hai va bene, prova ada aggiungere nella tabella Operativa dei record (più di uno) e lo stesso fai nella tabella Trascinamenti, ti accorgerai che nelle stampe selezionando tutti i combobox che trovi nella maschera Operativa e mandando in stampa avviene quello che trovi nel foglio word che ti ho allegato, lo stesso valee per l'allegato 12 i totali non sono corretti.

Ciao grazie
Mau67
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