Il mio report si costruisce in maniera dinamica. L'utente specifica su una form quali campi vuole vedere spuntando delle apposite chekbox e io costruisco la select in base a queste scelte.
Una volta eseguita la select assegnandola ad un recordset di ADO, associo il tutto al report che si apre visualizzando i campi specificati.
Il problema è che sul report ho inserito dei controlli non associati ad alcun campo, cosa che dovrei fare da codice, ma non ci riesco.
Vi posto un po' di codice, così mi posso spiegare meglio:
codice:
Dim rpReport As New crReport
Public pbStrFiltro As String
'variabili che setto dal form delle scelte dell'utente e
che mi servono per sapere quali campi dovrò visualizzare
nel report
Public vediTitolo As Integer, vediTitoloPostale As Integer
Public vediQualifica As Integer, vediSettore As Integer
Public vediProvenienza As Integer
Public vediAreaEnte As Integer, vediIndirizzi As Integer
Public vediRecapiti As Integer, vediEventi As Integer
Public vediFirmatari As Integer, vediAcquisitore As Integer
Private Sub Form_Load()
Screen.MousePointer = vbHourglass
Dim rsRs As New ADODB.Recordset
Dim strSql As String
'eseguo la storedprocedure origine dei dati
passandole il filtro creato nel form delle opzioni
strSql = "Exec sp_ElencoNominativiStampa " & pbStrFiltro
rsRs.Open strSql, miaConn, 1, 3
rpReport.Database.SetDataSource rsRs
PosizionaControlli
rsRs.Close
Set rsRs = Nothing
CRViewer91.ReportSource = rpReport
CRViewer91.ViewReport
Screen.MousePointer = vbDefault
End Sub
Sub PosizionaControlli()
Dim lngLeft As Long
If vediTitolo = 0 Then
rpReport.txtTitolo.Suppress = True
rpReport.Titolo.Suppress = True
Else
rpReport.txtTitolo.Left = lngLeft
rpReport.Titolo.Left = lngLeft
lngLeft = lngLeft + rpReport.Titolo.Width
End If
If vediTitoloPostale = 0 Then
rpReport.txtTitoloPostale.Suppress = True
rpReport.TitoloPostale.Suppress = True
Else
rpReport.txtTitoloPostale.Left = lngLeft
rpReport.TitoloPostale.Left = lngLeft
lngLeft = lngLeft + rpReport.TitoloPostale.Width
End If
rpReport.Nominativo.Left = lngLeft
rpReport.txtNominativo.Left = lngLeft
lngLeft = lngLeft + rpReport.Nominativo.Width
If vediAcquisitore = 0 Then
rpReport.txtAcquisitore.Suppress = True
rpReport.Acquisitore.Suppress = True
Else
rpReport.txtAcquisitore.Left = lngLeft
rpReport.Acquisitore.Left = lngLeft
lngLeft = lngLeft + rpReport.Acquisitore.Width
End If
If vediSettore = 0 Then
rpReport.txtSettore.Suppress = True
rpReport.Settore.Suppress = True
Else
rpReport.txtSettore.Left = lngLeft
rpReport.Settore.Left = lngLeft
lngLeft = lngLeft + rpReport.Settore.Width
End If
If vediQualifica = 0 Then
rpReport.txtQualifica.Suppress = True
rpReport.Qualifica.Suppress = True
Else
rpReport.txtQualifica.Left = lngLeft
rpReport.Qualifica.Left = lngLeft
lngLeft = lngLeft + rpReport.Qualifica.Width
End If
If vediProvenienza = 0 Then
rpReport.txtProvenienza.Suppress = True
rpReport.Provenienza.Suppress = True
Else
rpReport.txtProvenienza.Left = lngLeft
rpReport.Provenienza.Left = lngLeft
lngLeft = lngLeft + rpReport.Provenienza.Width
End If
If vediAreaEnte = 0 Then
rpReport.txtAreaEnte.Suppress = True
rpReport.AreaEnte.Suppress = True
Else
rpReport.txtAreaEnte.Left = lngLeft
rpReport.AreaEnte.Left = lngLeft
lngLeft = lngLeft + rpReport.AreaEnte.Width
End If
'controllo se girare il report in base a lngLeft
If lngLeft > 21 Then
rpReport.PaperOrientation = crLandscape
Else
rpReport.PaperOrientation = crPortrait
End If
End Sub
nell sub PosizionaControlli rendo visibili solo i dati scelti dall'utente.
Tutti i campi sono facoltativi, tranne il Nominativo che è obbligatorio e quindi non viene scelto dall'utente.
Il problema è: come faccio a dire ai campi del report(Titolo, TitoloPostale, Qualifica, Provenienza,ecc...) a quale campo del recordset derivante dalla storedprocedure devono legarsi?
spero di essere stata chiara
grazie a tutti