RxDBGrid - Find Next now working

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2685 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
alexs75
2013-02-15 06:46:24 +00:00
parent 966669d138
commit 40cb0c1012
4 changed files with 110 additions and 54 deletions

View File

@ -48,6 +48,9 @@ const
StringTypes = [ftString, {ftMemo,} ftFixedChar, ftWideString, ftFixedWideChar, ftWideMemo];
type
TRxSearchDirection = (rsdAll, rsdForward, rsdBackward);
type
{ TLocateObject }
@ -107,7 +110,8 @@ procedure InternalRestoreFields(DataSet: TDataSet; IniFile: TObject;
const Section: string; RestoreVisible: Boolean);}
function DataSetLocateThrough(DataSet: TDataSet; const KeyFields: string;
const KeyValues: Variant; Options: TLocateOptions): Boolean;
const KeyValues: Variant; Options: TLocateOptions; SearchOrigin:TRxSearchDirection = rsdAll): Boolean;
procedure SaveFieldsReg(DataSet: TDataSet; IniFile: TRegIniFile);
procedure RestoreFieldsReg(DataSet: TDataSet; IniFile: TRegIniFile;
RestoreVisible: Boolean);
@ -379,7 +383,7 @@ end;
{ DataSet locate routines }
function DataSetLocateThrough(DataSet: TDataSet; const KeyFields: string;
const KeyValues: Variant; Options: TLocateOptions): Boolean;
const KeyValues: Variant; Options: TLocateOptions; SearchOrigin:TRxSearchDirection = rsdAll): Boolean;
var
FieldCount: Integer;
Fields: TList;
@ -430,20 +434,40 @@ begin
try
DataSet.GetFieldList(Fields, KeyFields);
FieldCount := Fields.Count;
Result := CompareRecord;
if Result then Exit;
if SearchOrigin = rsdAll then
begin
Result := CompareRecord;
if Result then Exit;
end;
DataSet.DisableControls;
try
Bookmark := DataSet.GetBookmark;
try
with DataSet do begin
First;
while not EOF do begin
if SearchOrigin in [rsdAll, rsdForward] then
begin
if SearchOrigin = rsdAll then
DataSet.First;
while not DataSet.EOF do
begin
Result := CompareRecord;
if Result then Break;
Next;
DataSet.Next;
end;
end
else
if SearchOrigin = rsdBackward then
begin
//DataSet.Last;
while not DataSet.BOF do
begin
Result := CompareRecord;
if Result then Break;
DataSet.Prior;
end;
end;
finally
{$IFDEF NoAutomatedBookmark}
if not Result and DataSet.BookmarkValid(PChar(Bookmark)) then

View File

@ -1,7 +1,7 @@
object rxDBGridFindForm: TrxDBGridFindForm
Left = 969
Left = 688
Height = 225
Top = 314
Top = 327
Width = 493
ActiveControl = Edit1
Caption = 'Find'
@ -19,7 +19,7 @@ object rxDBGridFindForm: TrxDBGridFindForm
Left = 6
Height = 15
Top = 6
Width = 66
Width = 69
BorderSpacing.Around = 6
Caption = 'Text to find'
FocusControl = Edit1
@ -34,7 +34,7 @@ object rxDBGridFindForm: TrxDBGridFindForm
Left = 6
Height = 15
Top = 58
Width = 68
Width = 73
BorderSpacing.Around = 6
Caption = 'Find at filed'
ParentColor = False
@ -44,9 +44,9 @@ object rxDBGridFindForm: TrxDBGridFindForm
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 347
Height = 35
Top = 184
Width = 79
Height = 33
Top = 186
Width = 81
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Around = 6
@ -54,7 +54,7 @@ object rxDBGridFindForm: TrxDBGridFindForm
Caption = 'Find more'
Default = True
OnClick = BtnFindClick
TabOrder = 4
TabOrder = 2
end
object Button2: TButton
AnchorSideTop.Control = BtnFind
@ -63,10 +63,10 @@ object rxDBGridFindForm: TrxDBGridFindForm
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 432
Height = 35
Top = 184
Width = 55
Left = 434
Height = 33
Top = 186
Width = 53
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Top = 8
@ -75,7 +75,7 @@ object rxDBGridFindForm: TrxDBGridFindForm
Cancel = True
Caption = 'Close'
OnClick = Button2Click
TabOrder = 5
TabOrder = 3
end
object Edit1: TEdit
AnchorSideLeft.Control = ComboBox1
@ -98,7 +98,7 @@ object rxDBGridFindForm: TrxDBGridFindForm
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 12
Height = 29
Height = 27
Top = 79
Width = 475
Anchors = [akTop, akLeft, akRight]
@ -107,33 +107,25 @@ object rxDBGridFindForm: TrxDBGridFindForm
Style = csDropDownList
TabOrder = 1
end
object CheckBox1: TCheckBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = ComboBox1
AnchorSideTop.Side = asrBottom
Left = 6
Height = 22
Top = 114
Width = 118
BorderSpacing.Around = 6
Caption = 'Case sensetive'
TabOrder = 2
end
object RadioGroup1: TRadioGroup
AnchorSideLeft.Control = CheckBox1
AnchorSideLeft.Control = Panel1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = ComboBox1
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 130
Height = 51
Top = 114
Width = 357
Anchors = [akTop, akLeft, akRight]
AnchorSideBottom.Control = Panel1
AnchorSideBottom.Side = asrBottom
Left = 146
Height = 62
Top = 112
Width = 341
Anchors = [akTop, akLeft, akRight, akBottom]
AutoFill = True
AutoSize = True
BorderSpacing.Around = 6
BorderSpacing.Left = 6
BorderSpacing.Top = 6
BorderSpacing.Right = 6
Caption = 'Direction'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
@ -143,27 +135,51 @@ object rxDBGridFindForm: TrxDBGridFindForm
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 3
ClientHeight = 34
ClientWidth = 353
ClientHeight = 45
ClientWidth = 337
Columns = 3
Items.Strings = (
'All'
'Forward'
'Backward'
)
TabOrder = 6
Visible = False
TabOrder = 4
end
object CheckBox2: TCheckBox
object Panel1: TPanel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = CheckBox1
AnchorSideTop.Control = ComboBox1
AnchorSideTop.Side = asrBottom
Left = 6
Height = 22
Top = 142
Width = 84
Height = 62
Top = 112
Width = 134
AutoSize = True
BorderSpacing.Around = 6
Caption = 'Partial key'
TabOrder = 3
ClientHeight = 62
ClientWidth = 134
TabOrder = 5
object CheckBox2: TCheckBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = CheckBox1
AnchorSideTop.Side = asrBottom
Left = 7
Height = 21
Top = 34
Width = 88
BorderSpacing.Around = 6
Caption = 'Partial key'
TabOrder = 0
end
object CheckBox1: TCheckBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = Panel1
Left = 7
Height = 21
Top = 7
Width = 120
BorderSpacing.Around = 6
Caption = 'Case sensetive'
TabOrder = 1
end
end
end

View File

@ -52,6 +52,7 @@ type
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Panel1: TPanel;
RadioGroup1: TRadioGroup;
procedure BtnFindClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
@ -103,6 +104,8 @@ begin
RadioGroup1.Items.Add(sRxDbGridFindRangeBack);
BtnFind.Caption:=sRxFindMore;
Button2.Caption:=rsMbClose;
RadioGroup1.ItemIndex:=0;
end;
procedure TrxDBGridFindForm.FormShow(Sender: TObject);
@ -114,6 +117,9 @@ procedure TrxDBGridFindForm.BtnFindClick(Sender: TObject);
var
FieldName:string;
LOptions: TLocateOptions;
SearchOrigin:TRxSearchDirection;
P:TBookMark;
R:boolean;
begin
if Edit1.Text<>'' then
begin
@ -125,8 +131,18 @@ begin
if CheckBox2.Checked then
LOptions:=LOptions+[loPartialKey];
DataSetLocateThrough(FDataSet, FieldName, Edit1.Text, LOptions);
SearchOrigin:=TRxSearchDirection(RadioGroup1.ItemIndex);
P:=FDataSet.Bookmark;
if SearchOrigin = rsdForward then
FDataSet.Next
else
if SearchOrigin = rsdBackward then
FDataSet.Prior;
R:=DataSetLocateThrough(FDataSet, FieldName, Edit1.Text, LOptions, SearchOrigin);
finally
if not R then
FDataSet.Bookmark:=P;
end;
end;
end;

View File

@ -26,7 +26,7 @@ Copyright (c) 1998 Master-Bank
translate to Lazarus by alexs in 2005 - 2012
"/>
<License Value="LGPL"/>
<Version Major="2" Minor="4" Release="2" Build="120"/>
<Version Major="2" Minor="4" Release="5" Build="130"/>
<Files Count="67">
<Item1>
<Filename Value="autopanel.pas"/>