#Define TESTDATALOC _samples+'data\testdata.DBC' Public oForm oForm = Createobject('myForm') oForm.Show Define Class myform As Form Top = 0 Left = 0 Height = 480 Width = 750 DoCreate = .T. Caption = "Flex Grid Sort Sample - Drag a column to left to group by it" Add Object hflex As OleControl With ; Top = 0, ; Left = 0, ; Height = 420, ; Width = 750, ; Name = "Hflex", ; OleClass = 'MSHierarchicalFlexGridLib.MSHFlexGrid' Add Object cmdFun As CommandButton ; with Top = 425, Caption='Show some other features', AutoSize = .T. Procedure dosort Lparameters toObject With toObject .Col = 0 .ColSel = .Cols - 1 .Sort = 1 && Generic Ascending Endwith Endproc Procedure hflex.MouseDown *** ActiveX Control Event *** Lparameters Button, Shift, x, Y With This .Tag = "" If .MouseRow = 0 .Tag = Str(.MouseCol) .Drag( 1 ) Endif Endwith Endproc Procedure hflex.DragDrop Lparameters oSource, nXCoord, nYCoord If !Empty(This.Tag) With This .Redraw = .F. .ColPosition(Val(.Tag)) = .MouseCol Thisform.dosort(This) .Redraw = .T. Endwith Endif Endproc Procedure Init Local oRecordset,oConnection, strCn, strShp strCn = [Provider=MSDataShape;Persist Security Info=False;]+; [Data Source=]+TESTDATALOC+[;Data Provider=VFPOLEDB] strShp = [SHAPE { select customer.cust_id, Company, ]+; [ orders.order_id, order_date, order_net, shipped_on, ]+; [ line_no, prod_name ] +; [ From customer ]+; [ Left Outer Join orders ]+ ; [ On customer.cust_id = orders.cust_id ] +; [ inner Join orditems ]+ ; [ On orditems.order_id = orders.order_id ] +; [ inner Join products ]+ ; [ On orditems.product_id = products.product_id } ] oRecordset = Createobject("adodb.recordset") oConnection = Createobject("adodb.connection") With oConnection .Provider = "MSDataShape" .ConnectionString = strCn .Open Endwith With oRecordset .ActiveConnection = oConnection .Source = strShp .Open Endwith With Thisform.hflex .Datasource = oRecordset For ix = 1 To .Cols - 1 .MergeCol(ix) = .T. Endfor .MergeCells = 3 Endwith Thisform.dosort(Thisform.hflex) Endproc Procedure cmdFun.Click With Thisform.hflex .FixedRows=1 && Number of rows fixed at top .FixedCols=1 && Number of Cols Fixed at Left .FillStyle = 1 && Repeat .WordWrap = .T. * First Column .Row = 1 .Col = 0 .Rowsel = .Rows-1 .ColSel = 0 .CellBackcolor = 0xFF0000 && Set all to blue backcolor .CellForeColor = 0xFFFFFF && Set all to white forecolor .CellAlignment = 9 && General - strings Left,Center .CellFontName = 'Arial' .CellFontBold = .T. .CellFontItalic = .F. .CellFontSize = 9 * First Row .Row = 0 .Col = 1 .Rowsel = 0 .ColSel = .Cols-1 .CellBackcolor = 0xFF0000 && Set all to blue backcolor .CellForeColor = 0xFFFFFF && Set all to white forecolor .CellAlignment = 9 && General - strings Left,Center .CellFontName = 'Arial' .CellFontBold = .T. .CellFontItalic = .F. .CellFontSize = 9 *Initial coloring of data cells .Col = 1 .Row = 1 .ColSel = .Cols-1 .Rowsel = .Rows-1 .CellAlignment = 9 && General - strings Left,Center .CellBackcolor=0x00FFFF && Set all to yellow * Enter some manual text on row 4,7 on lefmost fixed col .TextMatrix(4,0)="Manual 4" .TextMatrix(7,0)="Manual 7" * Enter text manually in left topmost corner cell .TextMatrix(0,0)="VFP:)" * Change color for a group of cells .Row = 4 && rectangle top row .Col = 5 && rectangle left col .Rowsel = 5 && rectangle row end (not 5 rows, end row is 5) .ColSel = 7 && rectangle right col .CellBackcolor = 0xFFFF00 && Set all to cyan backcolor .CellForeColor = 0xFF0000 && Set all to blue forecolor Endwith Endproc EnddefineSample 2
#Define TESTDATALOC _samples+"data\testdata.DBC" Public oForm oForm = Createobject('myForm') oForm.Show Define Class myform As Form Top = 0 Left = 0 Height = 450 Width = 750 DoCreate = .T. Caption = "Form1" Name = "Form1" Add Object command1 As CommandButton With ; Autosize = .T., ; Top = 0, ; Left = 0, ; Name = "Set1", ; Caption = 'Sample 1' Add Object command2 As CommandButton With ; Autosize = .T., ; Top = 0, ; Left = 0, ; Name = "Set2", ; Caption = 'Sample 2' Add Object hflex As OleControl With ; Top = 0, ; Left = 0, ; Height = 420, ; Width = 750, ; Name = "Hflex", ; OleClass = 'MSHierarchicalFlexGridLib.MSHFlexGrid' Procedure LoadSet Lparameters tnSet Local oRecordset,oConnection, strCn, strShp strCn = [Provider=MSDataShape;Persist Security Info=False;]+; [Data Source=]+TESTDATALOC+[;Data Provider=VFPOLEDB] lcSel1 = [ select customer.cust_id, ]+; [ customer.Company,]+; [ orders.order_id,]+; [ orders.Order_date ]+; [ From customer ]+; [ inner Join orders On customer.cust_id = orders.cust_id ] lcSel2 = [ select od.order_id, od.line_no, ]+; [ products.prod_name, ]+; [ products.no_in_unit As 'Packaging', ]+; [ od.unit_price, ]+; [ od.Quantity, ]+; [ od.unit_price * od.Quantity As ExtendedPrice ]+; [ From orditems As od ]+; [ inner Join products On od.product_id = products.product_id ] Do Case Case tnSet = 1 strShp = [SHAPE { select Company, cust_id from customer } ]+; [Append (( Shape { Select Distinct First_name, Last_name, a.emp_id + cust_id As "Emp_sel", cust_id From employee a inner Join orders b On a.emp_id = b.emp_id } ]+; [Append (( Shape { Select Order_date, order_net, shipped_on, emp_id + cust_id As "Emp_sel",order_id From orders } ]+; [Append ( { Select order_id, line_no, prod_name From orditems inner Join products On products.product_id = orditems.product_id } As rsOrditems ]+; [Relate order_id To order_id )) As rsEmployee ]+; [Relate emp_sel To emp_sel )) As rsOrders ]+; [Relate cust_id To cust_id ) ] Case tnSet = 2 strShp = [ SHAPE ]+; [(Shape {]+lcSel1+[ } as rs1 ]+; [ Append ({]+lcSel2+[ } AS rsDetails RELATE order_id TO order_id), ]+; [ Sum(rsDetails.ExtendedPrice) As OrderTotal, Any(rsDetails.order_id)) As rsOrders ]+; [Compute rsOrders, ]+; [Sum(rsOrders.OrderTotal) As CustTotal, ]+; [Any(rsOrders.Company) As Cmpny ]+; [ By cust_id ] Endcase oRecordset = Createobject("adodb.recordset") oConnection = Createobject("adodb.connection") With oConnection .Provider = "MSDataShape" .ConnectionString = strCn .Open Endwith With oRecordset .ActiveConnection = oConnection .Source = strShp .Open Endwith With This.hflex .Datasource = oRecordset .Mergecells = 3 .GridColorBand(1) = Rgb(255,0,0) .GridColorBand(2) = Rgb(0,0,255) .GridColorBand(3) = Rgb(0,255,0) .ColWidth(0,0) = 300 .CollapseAll Endwith Endproc Procedure Init With This .Set2.Left = .Set1.Left + .Set1.Width + 5 .hflex.Top = .Set1.Top + .Set1.Height + 5 .hflex.Height = .Height - (.hflex.Top + 5) .hflex.Left = 5 .hflex.Width = .Width - 10 .LoadSet(1) Endwith Endproc Procedure Set1.Click Thisform.LoadSet(1) Endproc Procedure Set2.Click Thisform.LoadSet(2) Endproc EnddefineCetin