Aggiunta di una colonna contenente un campo calcolato alla griglia contenente l’indice dei documenti in DOCUMENT97.ASPX

' Il seguente frammento di codice mostra come aggiungere una colonna con un campo calcolato alla griglia BROWSE_INDICE contenente l'indice 
' dei documenti nella maschera DOCUMENT97.ASPX. In particolare viene aggiunta una colonna in prima posizione che visualizza un "semaforo" il cui colore (rosso, giallo, verde) dipende
' dal valore di un altro campo, e viene determinato tramite una query
' Lo script va inserito nello "Script Creazione" della grid o di altro oggetto del form
' NOTA: questo snippet si applica alla versione 2019 o successiva, per via dell'utilizzo del metodo Load_Records.
dim form as DOCUMENT=this.page

if left(form.form_state.subid,5)="VIACT" and not form.isPostback ' Si applica solo alla categoria con codice "VIACT"
   addhandler ctype(form.form_state.dmd_ref.DOCUMENT,QWTable).OnOpen,sub (ByVal DOCUMENT As object)
            ' Definisce il campo per il semaforo
      		' Lo deve fare nell'OnOpen in quanto la query DOCUMENT viene aperta più volte
            Dim f As QWField = New QWField
            f.Fieldname = "SEMAFORO"
            AddHandler f.BeforeGetValue, Sub(ByVal sender As Object, ByRef new_val As Object)
         	If Not DOCUMENT.Rowset.endofset Then
                       Dim par As AssocArray = New AssocArray
         		par("TIPO") = DOCUMENT.Rowset.Fields("TIPO").Value
                        par("TIPO_CONT") = DOCUMENT.Rowset.Fields("TIPO_CONT").Value
                        par("NUMERO") = DOCUMENT.Rowset.Fields("NUMERO").Value
                        par("IND_REV") = DOCUMENT.Rowset.Fields("IND_REV").Value
            
                        dim msg as string
                        dim q as qwtable
                        dim ss as string
                        ss="SELECT datediff(dd,DATE3,getdate()), flag1 "
                        ss+="FROM DOCUMENT "
                        ss+="WHERE (TIPO = :TIPO) AND (TIPO_CONT = :TIPO_CONT) AND (NUMERO = :NUMERO) AND (IND_REV = :IND_REV) and DATE3 is not null"                 
                        q=OpenTable(form,ss,par,false,false,msg)
                        if empty(msg) then
               		   if q.rowset.count() > 0 then
                              if q.rowset.fields(2).value = true then   ' VERDE
                                 new_val = "<img src='./images/2090.gif'>"              
                              else 
                     	         if q.rowset.fields(1).value >= 0 then   ' ROSSO'
                                    new_val = "<img src='./images/2092.gif'>"
                                 else ' GIALLO'
                                    new_val = "<img src='./images/2091.gif'>"
                                 end if
                  	       end if
                             else
                                new_val = ""
                             end if
                        Else
               		    new_val = ""
               		End If
                        CloseTable(form,q)
                   Else
                        new_val = ""
                   End If
             End Sub
             f.ReadOnly = True
             f.length = 50
      		f.iscalculated = true
      		DOCUMENT.Rowset.Fields.Add(f)
      End Sub
      
      ' Riattiva DOCUMENT per far scattare l'OnOpen e aggiungere il campo alla prima attivazione
      form.Load_Records()
            
      ' Definisce la colonna per il semaforo
      Dim g As qwWebControls.QWWebGrid
      g = form.FindControl2("BROWSE_INDICE")
      Dim col As Infragistics.WebUI.UltraWebGrid.UltraGridColumn = New Infragistics.WebUI.UltraWebGrid.UltraGridColumn
      col.Key = "SEMAFORO"
      col.BaseColumnName = "SEMAFORO"
      col.Width = New System.Web.UI.webControls.Unit(22)
      col.HeaderText = ""
      col.HTMLEncodeContent = False
      g.Columns.insert(0, col)
      g.RefreshControl() ' Deve rinfrescare la griglia dopo l'aggiunta della colonna e del beforegetvalue
end if