📄 colsetupform.pas
字号:
unit ColSetupForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, EditForm, KsSkinForms, StdCtrls, Buttons, dxExEdtr, dxTL, dxDBCtrl,
dxDBGrid, dxCntner, KsSkinPanels, dxDBTLCl, dxGrClms, KsSkinButtons,
KsSkinSpeedButtons, DB, ADODB, se_controls;
type
TfrmColSetup = class(TfrmEditForm)
SeSkinPanel1: TSeSkinPanel;
gridMain: TdxDBGrid;
gridMainColumn1: TdxDBGridColumn;
gridMainColumn2: TdxDBGridColumn;
gridMainColumn3: TdxDBGridCheckColumn;
sbUnName: TSeSkinSpeedButton;
sbVisible: TSeSkinSpeedButton;
sbUp: TSeSkinSpeedButton;
sbDown: TSeSkinSpeedButton;
sbRevert: TSeSkinSpeedButton;
bbOk: TSeSkinButton;
bbExit: TSeSkinButton;
dsSource: TDataSource;
DataSet: TADODataSet;
procedure sbRevertClick(Sender: TObject);
procedure bbOkClick(Sender: TObject);
procedure bbExitClick(Sender: TObject);
procedure sbVisibleClick(Sender: TObject);
procedure sbUnNameClick(Sender: TObject);
procedure sbUpClick(Sender: TObject);
procedure sbDownClick(Sender: TObject);
private
{ Private declarations }
bReturn: Boolean;
sCaption1: string;
Grid1: TdxDBGrid;
lInit1: Integer;
function InitData: Boolean;
function UpdateGrid: Boolean;
function RevertGrid(s: string; lUp: integer): Boolean;
function GetColumnID(sField: string): Integer;
procedure MainShow;
function LoadData: Boolean;
function ReturnSQL(Mode: string): string;
public
{ Public declarations }
end;
function ColSetupShow(sCaption: string; Grid: TdxDBGrid; lInit: Integer):
Boolean;
function SaveColWidth(sCaption: string; Grid: TdxDBGrid): Boolean;
implementation
uses DBData, SysPublic;
{$R *.dfm}
function ColSetupShow(sCaption: string; Grid: TdxDBGrid; lInit: Integer):
Boolean;
var
frmColSetup: TfrmColSetup;
begin
frmColSetup := TfrmColSetup.Create(Application);
with frmColSetup do
begin
sCaption1 := sCaption;
Grid1 := Grid;
lInit1 := lInit;
MainShow;
Result := bReturn;
Free;
end;
end;
function SaveColWidth(sCaption: string; Grid: TdxDBGrid): Boolean;
var
sSql, sFieldName: string;
lWidth, i: Integer;
begin
for i := 0 to Grid.ColumnCount - 1 do
begin
sFieldName := Grid.Columns[i].FieldName;
lWidth := Grid.Columns[i].Width;
sSql := ' Update ColSetup Set Width=' + IntToStr(lWidth) +
' Where Caption=''' + Trim(sCaption) + ''' and FieldName=''' +
Trim(sFieldName) + '''';
ExecSql(sSql);
end;
Result := True;
end;
procedure TfrmColSetup.MainShow;
begin
if not LoadData then
Exit;
if lInit1 = 0 then
ShowModal
else
UpdateGrid;
DataSet.Close;
end;
function TfrmColSetup.LoadData: Boolean;
begin
Result := False;
bReturn := false;
Caption := '通用表格列设置';
if not OpenDataSet(DataSet, ReturnSQL('S')) then
Exit;
Result := True;
end;
function TfrmColSetup.ReturnSQL(Mode: string): string;
begin
if Mode = 'S' then
Result := 'Select * from ColSetup Where Caption=''' + Trim(sCaption1) +
''' ORDER BY ColOrder'
else
if Mode = 'D' then
Result := 'Delete from ColSetup Where Caption=''' + Trim(sCaption1) + '''';
end;
function TfrmColSetup.InitData: Boolean;
var
sFieldName, sSysName, sUserName: string;
lWidth, i: Integer;
begin
Result := False;
ExecSql(ReturnSQL('D'));
if not OpenDataSet(DataSet, ReturnSQL('S')) then
Exit;
for i := 1 to Grid1.ColumnCount - 1 do
begin
sFieldName := Grid1.Columns[i].FieldName;
sSysName := Grid1.Columns[i].Caption;
lWidth := Grid1.Columns[i].Width;
sUserName := sSysName;
DataSet.Append;
DataSet.FieldByName('Caption').AsString := Trim(sCaption1);
DataSet.FieldByName('FieldName').AsString := Trim(sFieldName);
DataSet.FieldByName('SysName').AsString := Trim(sSysName);
DataSet.FieldByName('UserName').AsString := sUserName;
DataSet.FieldByName('Width').AsInteger := lWidth;
DataSet.FieldByName('Visible').AsInteger := 1;
DataSet.FieldByName('ColOrder').AsInteger := Grid1.Columns[i].Index;
end;
SaveDataSet(DataSet, True);
DataSet.First;
Result := True;
end;
function TfrmColSetup.UpdateGrid: Boolean;
var
i: Integer;
begin
Result := False;
try
begin
if DataSet.RecordCount <> Grid1.ColumnCount - 1 then
InitData;
DataSet.First;
while not DataSet.Eof do
begin
i := GetColumnID(DataSet.FieldByName('FieldName').AsString);
if i < 0 then
begin
DataSet.Next;
Continue;
end;
Grid1.Columns[i].Caption := DataSet.FieldByName('UserName').AsString;
Grid1.Columns[i].Width := DataSet.FieldByName('Width').AsInteger;
if DataSet.FieldByName('Visible').AsInteger < 0 then
Grid1.Columns[i].Visible := False
else
Grid1.Columns[i].Visible := True;
Grid1.Columns[i].Index := DataSet.FieldByName('ColOrder').AsInteger;
DataSet.Next;
end;
DataSet.First;
end;
except
Exit;
end;
Result := True;
end;
function TfrmColSetup.GetColumnID(sField: string): Integer;
var
i: Integer;
begin
Result := -1;
for i := 1 to Grid1.ColumnCount - 1 do
if Trim(sField) = Trim(Grid1.Columns[i].FieldName) then
begin
Result := i;
Exit;
end;
end;
procedure TfrmColSetup.sbRevertClick(Sender: TObject);
begin
inherited;
RevertGrid('A', 0);
end;
procedure TfrmColSetup.bbOkClick(Sender: TObject);
begin
inherited;
SaveDataSet(DataSet, True);
UpdateGrid;
Close;
end;
procedure TfrmColSetup.bbExitClick(Sender: TObject);
begin
inherited;
DataSet.CancelUpdates;
Close;
end;
function TfrmColSetup.RevertGrid(s: string; lUp: integer): Boolean;
var
SavePlace: TBookmark;
i1, i2: Integer;
begin
Result := False;
if Trim(s) = 'A' then
begin
if MsgBox('你确定要恢复所有改变,回到原始设置吗??',
'提示', MB_OKCANCEL) = IDOK then
begin
ExecSql(ReturnSQL('D'));
Close;
end;
end
else
if (Trim(s) = 'V') or (Trim(s) = 'N') then
with DataSet do
begin
SavePlace := GetBookmark;
First;
while not Eof do
begin
Edit;
if Trim(s) = 'V' then
FieldByName('Visible').AsInteger := 1
else
if Trim(s) = 'N' then
FieldByName('UserName').AsString := FieldByName('SysName').AsString;
Next;
end;
try
GotoBookmark(SavePlace);
finally
FreeBookmark(SavePlace);
end;
end
else
if Trim(s) = 'M' then
with DataSet do
begin
SavePlace := GetBookmark;
i1 := FieldByName('ColOrder').AsInteger;
if lUp = 0 then
Next
else
Prior;
if (lUp = 0) and Eof then
Exit;
if (lUp = 1) and Bof then
Exit;
i2 := FieldByName('ColOrder').AsInteger;
Edit;
FieldByName('ColOrder').AsInteger := i1;
if lUp = 0 then
Prior
else
Next;
if (lUp = 0) and Eof then
Exit;
if (lUp = 1) and Bof then
Exit;
Edit;
FieldByName('ColOrder').AsInteger := i2;
SaveDataSet(DataSet, True);
if not OpenDataSet(DataSet, ReturnSQL('S')) then
Exit;
try
GotoBookmark(SavePlace);
finally
FreeBookmark(SavePlace);
end;
if lUp = 0 then
Next
else
Prior;
end;
Result := True;
end;
procedure TfrmColSetup.sbVisibleClick(Sender: TObject);
begin
inherited;
RevertGrid('V', 0);
end;
procedure TfrmColSetup.sbUnNameClick(Sender: TObject);
begin
inherited;
RevertGrid('N', 0);
end;
procedure TfrmColSetup.sbUpClick(Sender: TObject);
begin
inherited;
RevertGrid('M', 1);
end;
procedure TfrmColSetup.sbDownClick(Sender: TObject);
begin
inherited;
RevertGrid('M', 0);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -