git-svn-id: https://192.168.0.254/svn/Proyectos.Varela_PuntosVenta/trunk@2 1c943782-d109-9647-9548-93b3ac332352
184 lines
4.8 KiB
ObjectPascal
184 lines
4.8 KiB
ObjectPascal
{*******************************************************}
|
|
{ }
|
|
{ Administración de puntos de venta }
|
|
{ }
|
|
{ Copyright (C) 2006 Rodax Software S.L. }
|
|
{ }
|
|
{*******************************************************}
|
|
|
|
unit uDBSelectionList;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, DB, cxGridTableView, uDADataTable, uIntegerList, cxGridCustomView;
|
|
|
|
type
|
|
TRecID = Integer;
|
|
TSelectedRowList = class;
|
|
|
|
ISelectedRowList = interface
|
|
['{1886B04A-DB0D-40AE-BCAE-DA57CD4CD582}']
|
|
function GetSelectedRows : TSelectedRowList;
|
|
property SelectedRows : TSelectedRowList read GetSelectedRows;
|
|
end;
|
|
|
|
TSelectedRowList = class
|
|
private
|
|
FDataTable: TDADataTable;
|
|
FListRecID : TIntegerList;
|
|
function GetCount: Integer;
|
|
function GetCurrentRowSelected: Boolean;
|
|
function GetItem(Index: Integer): TRecID;
|
|
procedure SetCurrentRowSelected(Value: Boolean);
|
|
protected
|
|
function CurrentRow: TRecID;
|
|
function Compare(const Item1, Item2: TRecID): Boolean;
|
|
public
|
|
constructor Create(ADataTable : TDADataTable);
|
|
destructor Destroy; override;
|
|
procedure Clear; // free all bookmarks
|
|
function Find(const Item: TRecID; var Index: Integer): Boolean;
|
|
function IndexOf(const Item: TRecID): Integer;
|
|
property Count: Integer read GetCount;
|
|
property CurrentRowSelected: Boolean read GetCurrentRowSelected
|
|
write SetCurrentRowSelected;
|
|
property Items[Index: Integer]: TRecID read GetItem; default;
|
|
function LocateItem(const Index : Integer) : Boolean;
|
|
end;
|
|
|
|
|
|
procedure SeleccionarFilasDesdeGrid(const AView : TcxCustomGridView;
|
|
var ASelectedRowList : ISelectedRowList);
|
|
|
|
|
|
implementation
|
|
|
|
uses
|
|
DBConsts, cxGridCustomTableView, cxControls, Math, Variants, Dialogs;
|
|
|
|
{ TSelectedRowList }
|
|
|
|
constructor TSelectedRowList.Create(ADataTable : TDADataTable);
|
|
begin
|
|
inherited Create;
|
|
FListRecID := TIntegerList.Create;
|
|
|
|
FDataTable := ADataTable;
|
|
end;
|
|
|
|
destructor TSelectedRowList.Destroy;
|
|
begin
|
|
Clear;
|
|
FListRecID.Free;
|
|
FDataTable := NIL;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TSelectedRowList.Clear;
|
|
begin
|
|
if FListRecID.Count = 0 then
|
|
Exit;
|
|
FListRecID.Clear;
|
|
end;
|
|
|
|
function TSelectedRowList.Compare(const Item1, Item2: TRecID): Boolean;
|
|
begin
|
|
Result := (Item1 = Item2);
|
|
end;
|
|
|
|
function TSelectedRowList.CurrentRow: TRecID;
|
|
begin
|
|
if not FDataTable.Active then
|
|
raise EDatabaseError.Create(sDataSetClosed);
|
|
Result := FDataTable.RecIDValue;
|
|
end;
|
|
|
|
function TSelectedRowList.GetCurrentRowSelected: Boolean;
|
|
var
|
|
Index: Integer;
|
|
begin
|
|
Result := Find(CurrentRow, Index);
|
|
end;
|
|
|
|
function TSelectedRowList.Find(const Item: TRecID; var Index: Integer): Boolean;
|
|
begin
|
|
Result := FListRecID.Find(Item, Index)
|
|
end;
|
|
|
|
function TSelectedRowList.GetCount: Integer;
|
|
begin
|
|
Result := FListRecID.Count;
|
|
end;
|
|
|
|
function TSelectedRowList.GetItem(Index: Integer): TRecID;
|
|
begin
|
|
Result := FListRecID.Integers[Index];
|
|
end;
|
|
|
|
function TSelectedRowList.IndexOf(const Item: TRecID): Integer;
|
|
var
|
|
AIndex : Integer;
|
|
begin
|
|
Result := -1;
|
|
if FListRecID.Find(Item, AIndex) then
|
|
Result := AIndex
|
|
end;
|
|
|
|
procedure TSelectedRowList.SetCurrentRowSelected(Value: Boolean);
|
|
var
|
|
Index: Integer;
|
|
Current: TRecID;
|
|
begin
|
|
Current := CurrentRow;
|
|
if (Find(Current, Index) = Value) then
|
|
Exit;
|
|
if Value then
|
|
FListRecID.Add(Current)
|
|
else
|
|
FListRecID.Delete(Index);
|
|
end;
|
|
|
|
|
|
|
|
procedure SeleccionarFilasDesdeGrid(const AView : TcxCustomGridView;
|
|
var ASelectedRowList : ISelectedRowList);
|
|
var
|
|
ADataTable : TDADataTable;
|
|
ABookmark : Pointer;
|
|
ARecord: TcxCustomGridRecord;
|
|
i : Integer;
|
|
begin
|
|
ADataTable := ASelectedRowList.SelectedRows.FDataTable;
|
|
AView.BeginUpdate;
|
|
ShowHourglassCursor;
|
|
ABookmark := ADataTable.GetBookMark;
|
|
try
|
|
ASelectedRowList.SelectedRows.Clear;
|
|
for i := 0 to TcxCustomGridTableController(AView.Controller).SelectedRecordCount-1 do
|
|
begin
|
|
ARecord := TcxCustomGridTableController(AView.Controller).SelectedRecords[i];
|
|
if (ARecord is TcxGridDataRow) then
|
|
begin
|
|
(ARecord as TcxGridDataRow).Focused := True;
|
|
ASelectedRowList.SelectedRows.CurrentRowSelected := True;
|
|
end;
|
|
end;
|
|
ADataTable.GotoBookmark(ABookmark);
|
|
finally
|
|
AView.EndUpdate;
|
|
ADataTable.FreeBookmark(ABookmark);
|
|
HideHourglassCursor;
|
|
end;
|
|
end;
|
|
|
|
|
|
function TSelectedRowList.LocateItem(const Index: Integer) : Boolean;
|
|
begin
|
|
if not FDataTable.Active then
|
|
raise EDatabaseError.Create(sDataSetClosed);
|
|
Result := FDataTable.Locate('RecID', Items[Index], []);
|
|
end;
|
|
|
|
end.
|