' 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