diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.ico b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.ico
new file mode 100644
index 000000000..0341321b5
Binary files /dev/null and b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.ico differ
diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.lpi b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.lpi
new file mode 100644
index 000000000..f48d0d5f9
--- /dev/null
+++ b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.lpi
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.lpr b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.lpr
new file mode 100644
index 000000000..ceda8923a
--- /dev/null
+++ b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.lpr
@@ -0,0 +1,22 @@
+program project1;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Interfaces, // this includes the LCL widgetset
+ Forms, ibexpress, rxnew, Unit1
+ { you can add units after this };
+
+{$R *.res}
+
+begin
+ RequireDerivedFormResource:=True;
+ Application.Scaled:=True;
+ Application.Initialize;
+ Application.CreateForm(TForm1, Form1);
+ Application.Run;
+end.
+
diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.lps b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.lps
new file mode 100644
index 000000000..71a963ac6
--- /dev/null
+++ b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.lps
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.res b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.res
new file mode 100644
index 000000000..1adb0406c
Binary files /dev/null and b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/project1.res differ
diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/unit1.lfm b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/unit1.lfm
new file mode 100644
index 000000000..653fb3327
--- /dev/null
+++ b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/unit1.lfm
@@ -0,0 +1,287 @@
+object Form1: TForm1
+ Left = 552
+ Height = 475
+ Top = 244
+ Width = 695
+ Caption = 'Form1'
+ ClientHeight = 475
+ ClientWidth = 695
+ OnCreate = FormCreate
+ LCLVersion = '1.9.0.0'
+ object Button1: TButton
+ Left = 337
+ Height = 25
+ Top = 63
+ Width = 75
+ Caption = 'Button1'
+ TabOrder = 0
+ end
+ object PageControl1: TPageControl
+ Left = 0
+ Height = 475
+ Top = 0
+ Width = 695
+ ActivePage = TabSheet2
+ Align = alClient
+ TabIndex = 1
+ TabOrder = 1
+ object TabSheet1: TTabSheet
+ Caption = 'TIBQuery'
+ ClientHeight = 441
+ ClientWidth = 685
+ object RxDBGrid1: TRxDBGrid
+ Left = 0
+ Height = 441
+ Top = 0
+ Width = 685
+ ColumnDefValues.BlobText = '(данные)'
+ TitleButtons = True
+ AutoSort = True
+ KeyStrokes = <
+ item
+ Command = rxgcShowFindDlg
+ ShortCut = 16454
+ Enabled = True
+ end
+ item
+ Command = rxgcShowColumnsDlg
+ ShortCut = 16471
+ Enabled = True
+ end
+ item
+ Command = rxgcShowFilterDlg
+ ShortCut = 16468
+ Enabled = True
+ end
+ item
+ Command = rxgcShowSortDlg
+ ShortCut = 16467
+ Enabled = True
+ end
+ item
+ Command = rxgcShowQuickFilter
+ ShortCut = 16465
+ Enabled = True
+ end
+ item
+ Command = rxgcHideQuickFilter
+ ShortCut = 16456
+ Enabled = True
+ end
+ item
+ Command = rxgcSelectAll
+ ShortCut = 16449
+ Enabled = True
+ end
+ item
+ Command = rxgcDeSelectAll
+ ShortCut = 16429
+ Enabled = True
+ end
+ item
+ Command = rxgcInvertSelection
+ ShortCut = 16426
+ Enabled = True
+ end
+ item
+ Command = rxgcOptimizeColumnsWidth
+ ShortCut = 16427
+ Enabled = True
+ end
+ item
+ Command = rxgcCopyCellValue
+ ShortCut = 16451
+ Enabled = True
+ end>
+ FooterOptions.DrawFullLine = False
+ SearchOptions.QuickSearchOptions = [loCaseInsensitive, loPartialKey]
+ SearchOptions.FromStart = False
+ OptionsRx = [rdgAllowColumnsForm, rdgAllowDialogFind, rdgAllowQuickFilter]
+ Align = alClient
+ Color = clWindow
+ DrawFullLine = False
+ FocusColor = clRed
+ SelectedColor = clHighlight
+ GridLineStyle = psSolid
+ DataSource = DataSource1
+ Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColumnMove, dgColLines, dgRowLines, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgHeaderPushedLook]
+ TabOrder = 0
+ end
+ end
+ object TabSheet2: TTabSheet
+ Caption = 'TIBDataSet'
+ ClientHeight = 441
+ ClientWidth = 685
+ object RxDBGrid2: TRxDBGrid
+ Left = 0
+ Height = 441
+ Top = 0
+ Width = 685
+ ColumnDefValues.BlobText = '(данные)'
+ TitleButtons = True
+ AutoSort = True
+ KeyStrokes = <
+ item
+ Command = rxgcShowFindDlg
+ ShortCut = 16454
+ Enabled = True
+ end
+ item
+ Command = rxgcShowColumnsDlg
+ ShortCut = 16471
+ Enabled = True
+ end
+ item
+ Command = rxgcShowFilterDlg
+ ShortCut = 16468
+ Enabled = True
+ end
+ item
+ Command = rxgcShowSortDlg
+ ShortCut = 16467
+ Enabled = True
+ end
+ item
+ Command = rxgcShowQuickFilter
+ ShortCut = 16465
+ Enabled = True
+ end
+ item
+ Command = rxgcHideQuickFilter
+ ShortCut = 16456
+ Enabled = True
+ end
+ item
+ Command = rxgcSelectAll
+ ShortCut = 16449
+ Enabled = True
+ end
+ item
+ Command = rxgcDeSelectAll
+ ShortCut = 16429
+ Enabled = True
+ end
+ item
+ Command = rxgcInvertSelection
+ ShortCut = 16426
+ Enabled = True
+ end
+ item
+ Command = rxgcOptimizeColumnsWidth
+ ShortCut = 16427
+ Enabled = True
+ end
+ item
+ Command = rxgcCopyCellValue
+ ShortCut = 16451
+ Enabled = True
+ end>
+ FooterOptions.DrawFullLine = False
+ SearchOptions.QuickSearchOptions = [loCaseInsensitive, loPartialKey]
+ SearchOptions.FromStart = False
+ OptionsRx = [rdgAllowColumnsForm, rdgAllowDialogFind, rdgAllowQuickFilter]
+ Align = alClient
+ Color = clWindow
+ DrawFullLine = False
+ FocusColor = clRed
+ SelectedColor = clHighlight
+ GridLineStyle = psSolid
+ DataSource = DataSource2
+ Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColumnMove, dgColLines, dgRowLines, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgHeaderPushedLook]
+ TabOrder = 0
+ end
+ end
+ end
+ object IBQuery1: TIBQuery
+ Database = IBDatabase1
+ Transaction = IBTransaction1
+ AutoStartTransaction = True
+ AutoCommit = True
+ AutoTrim = True
+ BufferChunks = 1000
+ CachedUpdates = False
+ GeneratorField.ApplyOnEvent = gaeOnNewRecord
+ SQL.Strings = (
+ 'select'
+ ' *'
+ 'from'
+ ' employee'
+ )
+ Params = <>
+ Left = 80
+ Top = 88
+ end
+ object IBDatabase1: TIBDatabase
+ Connected = True
+ LoginPrompt = False
+ AllowStreamedConnected = False
+ DatabaseName = '127.0.0.1:employee'
+ Params.Strings = (
+ 'lc_ctype=UTF8'
+ 'user_name=sysdba'
+ 'password=masterkey'
+ )
+ LibraryName = '/usr/lib64/libfbclient.so.3.0.2'
+ DefaultTransaction = IBTransaction1
+ IdleTimer = 0
+ TraceFlags = []
+ Left = 32
+ Top = 20
+ end
+ object IBTransaction1: TIBTransaction
+ Active = False
+ DefaultDatabase = IBDatabase1
+ Left = 80
+ Top = 20
+ end
+ object DataSource1: TDataSource
+ DataSet = IBQuery1
+ Left = 120
+ Top = 88
+ end
+ object IBDataSet1: TIBDataSet
+ Database = IBDatabase1
+ Transaction = IBTransaction1
+ AutoStartTransaction = True
+ AutoCommit = True
+ AutoTrim = True
+ AutoParamToField = True
+ UpdateTransaction = IBTransaction1
+ RetFields = True
+ BufferChunks = 1000
+ CachedUpdates = False
+ DeleteSQL.Strings = (
+ 'Delete From COUNTRY A'
+ 'Where A.COUNTRY = :COUNTRY'
+ )
+ InsertSQL.Strings = (
+ 'Insert Into COUNTRY(CURRENCY)'
+ 'Values(:CURRENCY) Returning COUNTRY'
+ )
+ RefreshSQL.Strings = (
+ 'Select A.COUNTRY, A.CURRENCY From COUNTRY A'
+ 'Where A.COUNTRY = :COUNTRY'
+ )
+ SelectSQL.Strings = (
+ 'Select A.COUNTRY, A.CURRENCY From COUNTRY A'
+ )
+ ModifySQL.Strings = (
+ 'Update COUNTRY A Set '#13#10' A.COUNTRY = :COUNTRY,'#13#10' A.CURRENCY = :CURRENCY'
+ 'Where A.COUNTRY = :OLD_COUNTRY'
+ )
+ GeneratorField.ApplyOnEvent = gaeOnNewRecord
+ DefValueFromServer = False
+ DetailConditoins = []
+ Left = 80
+ Top = 216
+ end
+ object RxSortIBX1: TRxSortIBX
+ Left = 424
+ Top = 48
+ end
+ object DataSource2: TDataSource
+ DataSet = IBDataSet1
+ Left = 120
+ Top = 216
+ end
+end
diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/unit1.pas b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/unit1.pas
new file mode 100644
index 000000000..f8cb8ee81
--- /dev/null
+++ b/components/rx/trunk/demos/rxdbgrid/RxDBGrid_Sort_IBX/unit1.pas
@@ -0,0 +1,54 @@
+unit Unit1;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, db,
+ IBQuery, IBDatabase, IBCustomDataSet, rxdbgrid, RxSortIBX;
+
+type
+
+ { TForm1 }
+
+ TForm1 = class(TForm)
+ Button1: TButton;
+ DataSource1: TDataSource;
+ DataSource2: TDataSource;
+ IBDatabase1: TIBDatabase;
+ IBDataSet1: TIBDataSet;
+ IBQuery1: TIBQuery;
+ IBTransaction1: TIBTransaction;
+ PageControl1: TPageControl;
+ RxDBGrid1: TRxDBGrid;
+ RxDBGrid2: TRxDBGrid;
+ RxSortIBX1: TRxSortIBX;
+ TabSheet1: TTabSheet;
+ TabSheet2: TTabSheet;
+ procedure FormCreate(Sender: TObject);
+ private
+
+ public
+
+ end;
+
+var
+ Form1: TForm1;
+
+implementation
+
+{$R *.lfm}
+
+{ TForm1 }
+
+procedure TForm1.FormCreate(Sender: TObject);
+begin
+ IBDatabase1.Connected:=true;
+ IBTransaction1.StartTransaction;
+ IBQuery1.Open;
+ IBDataSet1.Open;
+end;
+
+end.
+