我通常使用Delphi而不是Lazarus,并且一直在尝试将RXDbGrid软件包安装到Lazarus 2.0.6中,以检查我对此的建议答案,到目前为止没有任何运气。但是...
TRxColumn
源自DBGrids源文件中的TColumn
。
TColumn
具有公共属性Index
,它是一个整数,它是GridGrids集合中列的索引。
由于我无法获得RXDBGrid来安装atm,因此下面的示例使用普通的TDBGrid,但是在进行明显的细节更改时应该可以正常工作。
该示例包含3个字段,ID整数,名称字符串[20]和值整数。
为简单起见,将列顺序保存到TMemo中,而不是保存和加载IniFile,并且要测试LoadColumnInfo
,需要在备忘录中更改列顺序。
如您所见,要重新加载网格列顺序,最简单的方法是按左->右顺序保存列标题;并在重新加载保存的信息时使用函数ColumnByName
查找正确的列。
uses
Classes,SysUtils,memds,db,Forms,Controls,Graphics,Dialogs,DBGrids,StdCtrls;
type
TForm1 = class(TForm)
btnSaveColumns: TButton;
btnLoadColumns: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
MemDataset1: TMemDataset;
Memo1: TMemo;
procedure btnLoadColumnsClick(Sender: TObject);
procedure btnSaveColumnsClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
function ColumnByName(const AName: String): TColumn;
procedure LoadColumnInfo;
procedure SaveColumnInfo;
public
end;
[...]
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
MemDataSet1.Open;
for i := 0 to 5 do
MemDataSet1.InsertRecord([i,'Name' + IntToStr(i),i]);
end;
procedure TForm1.btnSaveColumnsClick(Sender: TObject);
begin
SaveColumnInfo;
end;
procedure TForm1.btnLoadColumnsClick(Sender: TObject);
begin
LoadColumnInfo;
end;
procedure TForm1.SaveColumnInfo;
var
i : Integer;
S : String;
begin
Memo1.Lines.Clear;
for i := 0 to DBGrid1.Columns.Count - 1 do begin
S := DBGrid1.Columns[i].Title.Caption;
Memo1.Lines.Add(S);
end;
end;
function TForm1.ColumnByName(const AName : String) : TColumn;
var
i : integer;
begin
for i := 0 to DBGrid1.Columns.Count - 1 do begin
Result := DBGrid1.Columns[i];
if CompareText(AName,Result.Title.Caption) = 0 then
exit;
end;
Result := Nil;
end;
procedure TForm1.LoadColumnInfo;
var
i : Integer;
Index : Integer;
Column : TColumn;
S : String;
begin
for i := 0 to Memo1.Lines.Count - 1 do begin
S := Memo1.Lines[i];
Column := ColumnByName(S);
Assert(Column <> Nil);
Column.Index := i;
end;
end;
end.
本文链接:https://www.f2er.com/3085994.html