Newsgroup: it.comp.appl.access
Titolo: Report con record colorati alternativamente

Ebbene eccoci alla parte  Report...
Mi chiedevo se esistesse una funzione o qcosa che mi permettesse di
visualizzare i miei record su di un Report con uno sfondo con strisce gialle
(o altro colore).
Non so se mi sono 'capito'  ;) , vorrei in pratica che se il mio report
visualizza  n  record, un record si ed uno no abbia uno sfondo che non sia
bianco, cosi da facilitarne la lettura.
Attualmente ho ovviato creando un campo contatore all'interno della tabella
ed assegnando il seguente codice 'su formattazione' del Report:
    sfondo.Visible = False
    If ID / 2 - Int(ID / 2) = 0 Then sfondo.Visible = True
dove ID è il campo contatore e sfondo invece è il nome del rettangolo
colorato
il problema è che se visualizzo il report con un filtro, il mio codice
basato sul campo contatore va a farsi friggere, infatti, se senza filtro il
campo contatore contiene 0,1,2,3,4,......
con il filtro può contenere 0,3,4,5,7,8,13.... e quindi lo 'sfondo' verrà
visualizzato nelle combinazioni + impensate...
Help me, please
Saluti e.. Buonanotte a tutto NG
Tony

 gialle (o altro colore).
[...]
Option Compare Database
Option Explicit
Private Sub Corpo_Format( _
  ByRef Cancel As Integer _
, ByRef FormatCount As Integer)
  Static s_lRow As Long
  Dim oControl  As Access.Control
  Dim bIsEven   As Boolean
  s_lRow = s_lRow + 1
  bIsEven = ((s_lRow / 2) = (s_lRow \ 2))
  For Each oControl In Me.Corpo.Controls
    With oControl
      If (bIsEven = True) Then
        .BackColor = vbYellow
      Else
        .BackColor = vbWhite
      End If
    End With
  Next
  Set oControl = Nothing
End Sub
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

 ha scritto nel messaggio
news:mKKl9.29071$Eu.6...@twister1.libero.it...

Ciao Marco, puoi inserire con controllo (possiamo chiamarlo Contarighe) nel
corpo report con proprietà (Origine controllo=1, visibile=no , Somma
parziale=Su tutto) creando così un contatore di righe a cui puoi applicare
il tuo codice utilizzato in precedenza.
----- dal tuo codice -------
 sfondo.Visible = False
 If Me.Contarighe mod 2  = 0 Then sfondo.Visible = True
(mod rende il resto della divisione)
Ciao Giorgio.


Buona la soluzione ed attualmente l'ho gia messa in pratica, però stò dando
una sbirciata pure alla seconda...
Ciao, e grazie
Tony

 Maurizio
Ciao e grazie
Tony

 da cosa può dipendere???
    Che controlli hai nella sezione Corpo? Se hai controlli che non
possiedono la proprieta' "BackColor" dovrai saltarli.
    Fai una verifica veloce veloce e metti un
        On Error Resume Next
come prima istruzione della routine e facci sapere.


 --------
Avendo inserito un rettangolo di sfondo ho fatto una piccola variante al tuo
suggerimento, eccola:
  Static s_lRow As Long
  '  Dim oControl  As Access.Control
  Dim bIsEven   As Boolean
  '  s_lRow = s_lRow + 1
  ' bIsEven = ((s_lRow / 2) = (s_lRow \ 2))
  '   inizialmente queste 2 istruzioni le ho spostate all'interno
dell'istruzione for, altrimenti credo non veniva aggiornata (ma posso
sbagliarmi)
  ' For Each oControl In Me.Corpo.Controls
  '   With oControl
Avevi ragione....
Il resto lo ho modificato xche il tutto funzionava fino alla 10a riga e poi
dava l'errore (essendo un report molto complesso ho una serie di caselle che
vengono nascoste a seconda del dato contenuto, ormai lo ho strutturato cosi
ed è troppo rognosa modificarlo)
   s_lRow = s_lRow + 1
   bIsEven = ((s_lRow / 2) = (s_lRow \ 2))
(ottimo \ non ne ero a conoscenza...) questa formula però non mi è del tutto
chiaro come possa funzionare (intendo il doppio = =) se puoi spiegarmi in
quali casi posso utilizzarla (o è solo con i dati di tipo Boolean??
      If (bIsEven = True) Then
        sfondo.Visible = True
      Else
        sfondo.Visible = False
      End If
di conseguenza ho tolto:
   '   End With
   ' Next
   ' Set oControl = Nothing
Particolare questo codice, ed interessante..  lo terrò molto in
considerazione alla creazione del prox report
1000 Tank's ancora
Cordialità
Tony

 Cordialità
    :-)
