Popolare dataset

venerdì 23 ottobre 2009 - 15.13

Mau67 Profilo | Expert

Ciao al forum, sviluppo in visual studio 2008 e database in access, ho il seguente problema:

Da una listview dovrei selezionare il chekbox dei vari record che ci sono e filtrando i dati con una data che si trova in una delle colonne della listview mi dovrebbe popolare un dataset sommando i dati e inserendoli nel dataset per data.

Come faccio a fare ciò?

Grazie in anticipo
Mau67

dante Profilo | Junior Member

Semplice:
1) crei un nuovo dataset
2)fai un ciclo for nel quale controlli lo stato checked e la data.
3) nel caso soddisfino i requisiti inserisci i dati nel dataset

Saluti Dante

Mau67 Profilo | Expert

ho fatto il ciclo for

Dim Data As Date = Id.SubItems(1).Text

For Each Id As ListViewItem In ListView2.Items
If Id.Checked = True Then
strSQL = "SELECT Servizi.IDAnagrafica, ((Sum(Servizi.Anu)) + (Fix(((Sum(Servizi.Mnu)) + Fix(((Sum(Servizi.Gnu)) / 30))) / 12))) AS Anu," & _
"(((((Sum(Servizi.Mnu)) + (Fix(((Sum(Servizi.Gnu)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mnu)) + (Fix((Sum(Servizi.Gnu)) / 30))) / 12))) * 12) AS Mnu," & _
"((((Sum(Servizi.Gnu)) / 30) - Fix(((Sum(Servizi.Gnu)) / 30))) * 30) AS Gnu," & _
"((Sum(Servizi.Aca)) + (Fix(((Sum(Servizi.Mca)) + Fix(((Sum(Servizi.Gca)) / 30))) / 12))) AS Aca," & _
"(((((Sum(Servizi.Mca)) + (Fix(((Sum(Servizi.Gca)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mca)) + (Fix((Sum(Servizi.Gca)) / 30))) / 12))) * 12) AS Mca," & _
"((((Sum(Servizi.Gca)) / 30) - Fix(((Sum(Servizi.Gca)) / 30))) * 30) AS Gca," & _
"((Sum(Servizi.Asu)) + (Fix(((Sum(Servizi.Msu)) + Fix(((Sum(Servizi.Gsu)) / 30))) / 12))) AS Asu," & _
"(((((Sum(Servizi.Msu)) + (Fix(((Sum(Servizi.Gsu)) / 30))))) / 12 - (Fix(((Sum(Servizi.Msu)) + (Fix((Sum(Servizi.Gsu)) / 30))) / 12))) * 12) AS Msu," & _
"((((Sum(Servizi.Gsu)) / 30) - Fix(((Sum(Servizi.Gsu)) / 30))) * 30) AS Gsu," & _
"((Sum(Servizi.Ata)) + (Fix(((Sum(Servizi.Mta)) + Fix(((Sum(Servizi.Gta)) / 30))) / 12))) AS Ata," & _
"(((((Sum(Servizi.Mta)) + (Fix(((Sum(Servizi.Gta)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mta)) + (Fix((Sum(Servizi.Gta)) / 30))) / 12))) * 12) AS Mta," & _
"((((Sum(Servizi.Gta)) / 30) - Fix(((Sum(Servizi.Gta)) / 30))) * 30) AS Gta," & _
"((Sum(Servizi.Apa)) + (Fix(((Sum(Servizi.Mpa)) + Fix(((Sum(Servizi.Gpa)) / 30))) / 12))) AS Apa," & _
"(((((Sum(Servizi.Mpa)) + (Fix(((Sum(Servizi.Gpa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mpa)) + (Fix((Sum(Servizi.Gpa)) / 30))) / 12))) * 12) AS Mpa," & _
"((((Sum(Servizi.Gpa)) / 30) - Fix(((Sum(Servizi.Gpa)) / 30))) * 30) AS Gpa," & _
"((Sum(Servizi.Afa)) + (Fix(((Sum(Servizi.Mfa)) + Fix(((Sum(Servizi.Gfa)) / 30))) / 12))) AS Afa," & _
"(((((Sum(Servizi.Mfa)) + (Fix(((Sum(Servizi.Gfa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mfa)) + (Fix((Sum(Servizi.Gfa)) / 30))) / 12))) * 12) AS Mfa," & _
"((((Sum(Servizi.Gfa)) / 30) - Fix(((Sum(Servizi.Gfa)) / 30))) * 30) AS Gfa" & _
" FROM(Servizi)where Servizi.Al < #" & Date.Parse(Data) & "# GROUP BY Servizi.IDAnagrafica HAVING Servizi.IDAnagrafica = '" & ComboBox1.SelectedValue & "'"

End If
Next

ma non funziona come dovrebbe

Mau67

dante Profilo | Junior Member

Ciao
Non funziona come dovrebbe? Cioè?

scrivendo così
Dim Data As Date = Id.SubItems(1).Text
For Each Id As ListViewItem In ListView2.Items

vuol dire che la variabile id è dimensionata 2 volte: una nel ciclo ed una prima di esso.
In secondo luogo se "data" è un valore presente nel ListViewItem (quindi lo prendi da ogni riga)? Nel caso dovrà essere all'interno del ciclo altrimenti avrà sempre il solito valore.


Dante

Mau67 Profilo | Expert

E' proprio questo il problema se seleziono il primo combo della listview non carica nessn dato nel dataset se invece ne seleziono 2 mi duplica i risultati invece così non deve essere.

il filtro con le date lo prende dalla listview2, quindi per ogni data deve calcolare i totali non so se sono stato chiaro.

potresti sistemarmi il codice che ti ho postato affinchè ttto funzioni?

Grazie
Mau67

dante Profilo | Junior Member

Mandami un pm con il progetto o con la parte interessata

Mau67 Profilo | Expert

Il progetto è allegato in questo threads http://www.dotnethell.it/forum/messages.aspx?ThreadID=32753

Ciao Graze
Mau67

dante Profilo | Junior Member

Ciao
Una cosa veloce:

se la parte interessata è quella dsritta per il ciclo dovresti fare così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

in questo modo l'anno lo prende da ogni item della listview

Per il resto dato il tipo diprogetto non capisco perchè non utilizzi i datatable etc...

se hai bisogno contattami su msn in modo che io possa darti una mano in modo piu' diretto ed adeguato.

Saluti
Dante

Mau67 Profilo | Expert

Si mi farebbe piacere contattarti su msn! puoi mandarmi contatto?

Ciao e grazie
Mau67

Mau67 Profilo | Expert

Scusa Dante, ho fatto come mi hai detto, però il problema è questo:

Tanti sono i record nella listview e altrettanti ne carica nel dataset anche se ne seleziono solo uno, sommando i totali uguali per tutti i record,
invece dovrebbe popolare solo un record, e lo stesso se ne seleziono più di uno li trasporta tutti nel dataset e il totale dell'ultimo record lo somma per tutti i record uguali.

Ti chiederei se potresti con il progetto che ti ho mandato riuscire a risolvere il mio problema che ormai e da parecchio tempo che ci stò dietro senza risultati, prendi tu gli accorgimenti del caso.

Grazie
Mau67

dante Profilo | Junior Member

Ciao,
ti avevo chiesto di contattarmi su msn in modo da avere delucidazioni... se sono on-line e posso fallo senza problemi

comunque da quello che ho capito il problema è che fai la fill ad ogni ciclo. Così facendo i dati precedenti li perdi.
Io personalmente non ho mai avuto la necessità di usare un OleDbDataAdapter. Penso che il tutto si risolverebbe tranquillamente con un approcio diverso. Ovvero utilizzando i TableAdapter.
Dacci un occhio e vedrai che non avrai più problemi.

Dante

Mau67 Profilo | Expert

Finalmente sono riuscito a costruire il codice che va bene, il problema che nel seguente codice non mi fà le somme:

Dim TotTrascRow As dtsAtto.TotaliRow
TotTrascRow = dtsAtto.Totali.NewRow
TotTrascRow.ID = Id.Text
TotTrascRow.Asu = ((+(RowServiziRow.Asu)) + (Fix(((+(RowServiziRow.Msu)) + Fix(((+(RowServiziRow.Gsu)) / 30))) / 12)))
TotTrascRow.Msu = (((((+(RowServiziRow.Asu)) + (Fix(((+(RowServiziRow.Gsu)) / 30))))) / 12 - (Fix(((+(RowServiziRow.Msu)) + (Fix((+(RowServiziRow.Gsu)) / 30))) / 12))) * 12)
TotTrascRow.Gsu = ((((+(RowServiziRow.Gsu)) / 30) - Fix(((+(RowServiziRow.Gsu)) / 30))) * 30)
dtsAtto.Totali.Rows.Add(TotTrascRow)


Cosa sbaglio?

Un aiuto 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