unit ArraysClientMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, uROClient, uROClientIntf, uRORemoteService, uROWinInetHttpChannel, uROBinMessage, Grids, DBGrids, ComCtrls, ArraysLibrary_Intf, ExtCtrls; type TArraysClientMainForm = class(TForm) ROMessage: TROBinMessage; ROChannel: TROWinInetHTTPChannel; RORemoteService: TRORemoteService; CustomersGrid: TStringGrid; OrdersGrid: TStringGrid; Splitter1: TSplitter; OpenButton: TButton; Panel1: TPanel; procedure OpenButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure CustomersGridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); private { Private declarations } CustCol: CustomersCollection; OrdCol: OrdersCollection; FCustID: string; procedure SetupGrid; procedure SetupCustomers; procedure SetupOrders(CustID: string); procedure ClearGrid(Grid: TStringGrid); public { Public declarations } end; var ArraysClientMainForm: TArraysClientMainForm; implementation {$R *.dfm} procedure TArraysClientMainForm.OpenButtonClick(Sender: TObject); var tbl: Tables; begin tbl := (RORemoteService as IArraysService).GetTables; try CustCol.LoadFromArray(tbl.aCustomers); OrdCol.LoadFromArray(tbl.aOrders); finally tbl.Free; end; SetupCustomers; SetupOrders(CustomersGrid.Cells[0, 1]); end; procedure TArraysClientMainForm.FormCreate(Sender: TObject); begin CustCol := CustomersCollection.Create; OrdCol := OrdersCollection.Create; SetupGrid; end; procedure TArraysClientMainForm.FormDestroy(Sender: TObject); begin CustCol.Free; OrdCol.Free; end; procedure TArraysClientMainForm.SetupGrid; begin with CustomersGrid do begin if RowCount < 2 then RowCount := 2; ColCount:=11; FixedRows := 1; Cells[0, 0] := 'CustomerID'; Cells[1, 0] := 'CompanyName'; Cells[2, 0] := 'ContactName'; Cells[3, 0] := 'ContactTitle'; Cells[4, 0] := 'Address'; Cells[5, 0] := 'City'; Cells[6, 0] := 'Region'; Cells[7, 0] := 'Postalcode'; Cells[8, 0] := 'Country'; Cells[9, 0] := 'Phone'; Cells[10, 0] := 'Fax'; end; with OrdersGrid do begin if RowCount < 2 then RowCount := 2; ColCount:= 14; FixedRows := 1; Cells[0, 0] := 'OrderID'; Cells[1, 0] := 'CustomerID'; Cells[2, 0] := 'EmployeeID'; Cells[3, 0] := 'OrderDate'; Cells[4, 0] := 'RequiredDate'; Cells[5, 0] := 'ShippedDate'; Cells[6, 0] := 'ShipVia'; Cells[7, 0] := 'Freight'; Cells[8, 0] := 'ShipName'; Cells[9, 0] := 'ShipAddress'; Cells[10, 0] := 'ShipCity'; Cells[11, 0] := 'ShipRegion'; Cells[12, 0] := 'ShipPostalCode'; Cells[13, 0] := 'ShipCountry'; end; end; procedure TArraysClientMainForm.SetupCustomers; var i: integer; CustItem: Customers; begin ClearGrid(CustomersGrid); with CustomersGrid do begin RowCount := 1 + CustCol.Count; for i := 0 to CustCol.Count - 1 do begin CustItem := CustCol[i]; Cells[0, i + 1] := CustItem.CustomerID; Cells[1, i + 1] := CustItem.CompanyName; Cells[2, i + 1] := CustItem.ContactName; Cells[3, i + 1] := CustItem.ContactTitle; Cells[4, i + 1] := CustItem.Address; Cells[5, i + 1] := CustItem.City; Cells[6, i + 1] := CustItem.Region; Cells[7, i + 1] := CustItem.Postalcode; Cells[8, i + 1] := CustItem.Country; Cells[9, i + 1] := CustItem.Phone; Cells[10, i + 1] := CustItem.Fax; end; end; end; procedure TArraysClientMainForm.SetupOrders(CustID: string); var i: integer; k: integer; OrdersItem: Orders; begin if FCustID = CustID then Exit; ClearGrid(OrdersGrid); with OrdersGrid do begin FCustID := CustID; RowCount := 1 + OrdCol.Count; k := 0; for i := 0 to OrdCol.Count - 1 do begin OrdersItem := OrdCol[i]; if OrdersItem.CustomerID = CustID then begin inc(k); Cells[0, k] := IntToStr(OrdersItem.OrderID); Cells[1, k] := OrdersItem.CustomerID; Cells[2, k] := IntToStr(OrdersItem.EmployeeID); Cells[3, k] := DateTimeToStr(OrdersItem.OrderDate); Cells[4, k] := DateTimeToStr(OrdersItem.RequiredDate); Cells[5, k] := DateTimeToStr(OrdersItem.ShippedDate); Cells[6, k] := IntToStr(OrdersItem.ShipVia); Cells[7, k] := CurrToStr(OrdersItem.Freight); Cells[8, k] := OrdersItem.ShipName; Cells[9, k] := OrdersItem.ShipAddress; Cells[10, k] := OrdersItem.ShipCity; Cells[11, k] := OrdersItem.ShipRegion; Cells[12, k] := OrdersItem.ShipPostalCode; Cells[13, k] := OrdersItem.ShipCountry; end; end; if k > 0 then RowCount := k + 1 else ClearGrid(OrdersGrid); end; end; procedure TArraysClientMainForm.ClearGrid(Grid: TStringGrid); begin Grid.RowCount := 1; Grid.RowCount := 2; Grid.Rows[1].Clear; Grid.FixedRows := 1; end; procedure TArraysClientMainForm.CustomersGridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin if ARow > 0 then SetupOrders(CustomersGrid.Cells[0, aRow]); end; end.