*!* grid_calculatedcolumn.prg
PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.Show
Read Events
Close all
Clear All
RETURN
**************************************************
DEFINE CLASS form1 AS form
AutoCenter = .T.
Caption = "Grid with calculated columns"
Width = 450
MinHeight = This.Height
MinWidth = This.Width
ADD OBJECT grid1 AS grid WITH ;
ColumnCount = -1, ;
Left = 12, ;
Top = 42, ;
Width = ThisForm.Width - 24, ;
Height = ThisForm.Height - 54, ;
RecordSource = "curTemp", ;
Anchor = 15
PROCEDURE grid1.Init
WITH This.Column1
.ReadOnly = .T.
.Width = 60
.ControlSource = "C1"
.Header1.Caption = "ID"
ENDWITH
WITH This.Column2
.Width = 60
.ControlSource = "F2"
.Header1.Caption = "F2"
ENDWITH
WITH This.Column3
.Width = 60
.ControlSource = "F3"
.Header1.Caption = "F3"
ENDWITH
ENDPROC
ADD OBJECT lblInfo as Label WITH ;
Top = 6, Left = 234, Caption = "You may modify F2 or F3", AutoSize = .T., FontBold = .T.
ADD OBJECT cmdUndo AS CommandButton WITH ;
Left = 12, Top = 6, Height = 24, Caption = "O-Data"
PROCEDURE cmdUndo.Click()
With ThisForm.Grid1
.ColumnCount = -1
.Recordsource = "curTemp"
.Column1.Width = 60
.Column1.Sparse = .F.
.Column1.ReadOnly = .T.
.Column1.Header1.Caption = "ID"
.Column2.Width = 60
.Column2.Sparse = .F.
.Column2.Text1.Inputmask = "999,999"
.Column3.Width = 60
.Column3.Sparse = .F.
.Column3.Text1.Inputmask = "999,999"
ENDWITH
LOCATE
WITH ThisForm
.lblInfo.Caption = "You may modify F1 or F2"
.Refresh()
ENDWITH
ENDPROC
ADD OBJECT cmdDoit AS CommandButton WITH ;
Left = 120, Top = 6, Height = 24, Caption = "Calculate"
PROCEDURE cmdDoit.Click()
Select C1, f2, f3, f2 + f3 as f4, (2 * f2) + (f3 / 4) as F5 from curTemp WITH (Buffering = .F.) into CURSOR curResults
LOCATE
With ThisForm.Grid1
.ColumnCount = -1
.Recordsource = "curResults"
.SetAll("DynamicBackColor", "ThisForm.MyBackColor()", "Column")
.SetAll("DynamicFontBold", "ThisForm.MyFontBold()", "Column")
.Column1.Width = 60
.Column1.Header1.Caption = "ID"
.Column2.Width = 60
.Column2.Sparse = .F.
.Column2.Text1.Inputmask = "999,999"
.Column3.Width = 60
.Column3.Sparse = .F.
.Column3.Text1.Inputmask = "999,999"
.Column4.Width = 90
.Column4.Sparse = .F.
.Column4.Text1.Inputmask = "999,999"
.Column4.Header1.Caption = "F2 + F3"
.Column5.Width = 90
.Column5.Sparse = .F.
.Column5.Text1.Inputmask = "999,999.99"
.Column5.Header1.Caption = "2*F2 + F3/4"
EndWith
WITH ThisForm
.lblInfo.Caption = "Calculated data"
.Refresh()
ENDWITH
ENDPROC
PROCEDURE MyBackColor()
DO case
CASE F2 < 250
RETURN RGB(125, 255, 255)
CASE BETWEEN(F2, 250, 500)
RETURN RGB(255, 255, 125)
OTHERWISE
RETURN RGB(255, 255, 255)
ENDCASE
ENDPROC
PROCEDURE MyFontBold()
IF F2 < 250
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDPROC
PROCEDURE Destroy
Thisform.Release()
CLOSE ALL
Clear Events
ENDPROC
PROCEDURE Load
LOCAL i
CREATE CURSOR curTemp (C1 C(8), f2 I, f3 I)
FOR i = 1 TO 20
INSERT INTO curTemp VALUES ( "ID" + TRANSFORM(Int(Rand()*1001)), Int(rand()*1000), Int(Rand()*999))
ENDFOR
LOCATE
ENDPROC
ENDDEFINE
*********************************************