unit QuantumGrid4_ClientData; interface uses {vcl:} SysUtils, Classes, DB, DBClient, {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, {Data Abstract:} uDADataTable, uDABINAdapter, uDACDSDataTable, uDAADODataTable, uDAScriptingProvider, uDARemoteDataAdapter, uDADataStreamer; type TQuantumGrid4_ClientDataModule = class(TDataModule) ROMessage: TROBinMessage; ROChannel: TROWinInetHTTPChannel; RORemoteService: TRORemoteService; bdsCustomers: TDABinDataStreamer; dtCustomers: TDACDSDataTable; dsCustomers: TDADataSource; dtOrders: TDACDSDataTable; dsOrders: TDADataSource; rdaCustomers: TDARemoteDataAdapter; rdaorders: TDARemoteDataAdapter; bdsOrders: TDABinDataStreamer; procedure dtCustomersAfterScroll(DataTable: TDADataTable); procedure dtCustomersAfterOpen(DataTable: TDADataTable); private fFetchedCustomers : TStringList; public constructor Create(aOwner : TComponent); override; destructor Destroy; override; end; var QuantumGrid4_ClientDataModule: TQuantumGrid4_ClientDataModule; implementation uses uDAInterfaces; {$R *.dfm} { TClientDataModule } constructor TQuantumGrid4_ClientDataModule.Create(aOwner: TComponent); begin inherited; fFetchedCustomers := TStringList.Create; fFetchedCustomers.Sorted := TRUE; end; destructor TQuantumGrid4_ClientDataModule.Destroy; begin fFetchedCustomers.Free; inherited; end; procedure TQuantumGrid4_ClientDataModule.dtCustomersAfterScroll( DataTable: TDADataTable); var lCustomerID : string; begin if dtCustomers.Fetching then Exit; with dtOrders do begin lCustomerID := dtCustomers.FieldByName('CustomerID').AsString; if (fFetchedCustomers.IndexOf(lCustomerID)>=0) then Exit else fFetchedCustomers.Add(lCustomerID); rdaorders.GetDataCall.ParamByName('CustomerID').AsString := lCustomerID; LoadFromRemoteSource; end; end; procedure TQuantumGrid4_ClientDataModule.dtCustomersAfterOpen(DataTable: TDADataTable); begin fFetchedCustomers.Clear; dtCustomersAfterScroll(DataTable); end; initialization end.