wsbrowse.pas
来自「企业ERP管理系统」· PAS 代码 · 共 592 行 · 第 1/2 页
PAS
592 行
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unit Name: WSBrowse
Author: Qiuliang
Purpose:
History:
2002 - 10 - 28 Created
Description:
一、创建数据游览窗体:
1. 继承 TWSBrowseForm 创建新 Form
2. 在该 Form 上放置需浏览的 DataSet,通过字段编辑器加入需使用的字段。填写每
个字段的 DisplayLabel(中文标题)属性,并将不需要在 DBGrid 中显示出来的字段的
Visible 置为 False(首要)
3. 需要浏览多少个 DataSet 就在 PageControl 上创建多少页,并给每一个 TabSheet
的Tag 属性赋唯一值, 并与DataSet 的 Tag 属性相对应;这样,当转到某一 TabSheet
时 DBGrid 中就显示有相同 Tag 的 DataSet;
4. 加入以下代码:
//声明部分:
protected
function CreateEditForm: TWSEditForm; override;
//函数实体部分:
function TWSBrowseDemoForm.CreateEditForm: TWSEditForm;
begin
// 根据不同页创建编辑不同的窗体
case PageControl.ActivePageIndex of
0: Result := TWSEditDemoForm.Create(Application);
1: Result := TWSEditDemoForm.Create(Application);
end;
end;
5. //传多个参数给编辑窗口(可选)
//在游览窗体:
protected
function GetEditParams: Variant; override; //重置取得参数函数
function TWSBrowseDemoForm.GetEditParams: Variant;
begin
Result := VarArrayOf([DataSet.Fields[0].Value,
DataSet.Fields[1].Value,
DataSet.Fields[2].Value,
DataSet.Fields[3].Value]);
end;
//在编辑窗体:
function TWSEditDemoForm.Edit(const Params: Variant): Boolean;
begin
Panel1.Caption := Format('Params = %s', [VarToStr(Params[0])]) + '+' +
Format('+%s', [VarToStr(Params[1])]) + '+' +
Format('+%s', [VarToStr(Params[2])]) + '+' +
Format('+%s', [VarToStr(Params[3])]);
Result := ShowModal = mrOK;
end;
二、创建数据编辑窗体:
1. 继承 TWSEditForm 创建一个新的 Form
2. 加入所需操作控件及代码
3. 加入以下代码:
//声明部分:
public
function Enter: Boolean; override;
function Edit(const Params: Variant): Boolean; override;
//函数实体部分:
function TWSEditDemoForm.Edit(const Params: Variant): Boolean;
begin
Panel1.Caption := Format('Params = %s', [VarToStr(Params)]);
//初始化界面
Result := ShowModal = mrOK;
end;
function TWSEditDemoForm.Enter: Boolean;
begin
Result := ShowModal = mrOK;
end;
补充说明:
以上TWSEditDemoForm,TWSBrowseDemoForm为实际新创建的窗口类名;
以上代码是继承后所必须写的代码(并且格式也不能变)!
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}
unit WSBrowse;
interface
{$I DEFINE.INC}
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ActnList, Grids, DBGrids, ExtCtrls, ComCtrls, TypInfo, QLDBFlt,
QuickRpt, QRExtra, QLRptBld, StdCtrls, Buttons, WSEdit, QLDBGrid,
ImgList, ToolWin, WSCstFrm, ADODB, Menus, QLDBCstVw;
type
TWSBrowseForm = class(TWSCustomForm)
ActionList: TActionList;
AddNewAction: TAction;
DataSource: TDataSource;
DeleteAction: TAction;
EditAction: TAction;
ExportAction: TAction;
FiltrateAction: TAction;
PageControl: TPageControl;
PrintAction: TAction;
PrintPreviewAction: TAction;
TabSheet1: TTabSheet;
RefreshAction: TAction;
DBGrid: TQLDBGrid;
ToolBar: TToolBar;
ExitAction: TAction;
Panel1: TPanel;
WsBrowsePop: TPopupMenu;
wsbrowsepopnRename: TMenuItem;
wsbrowsepopDelete: TMenuItem;
CustomizeViewAction: TAction;
ShowChartAction: TAction;
procedure DBGridTitleClick(Column: TColumn);
procedure DeleteActionExecute(Sender: TObject);
procedure DeleteActionUpdate(Sender: TObject);
procedure EditActionUpdate(Sender: TObject);
procedure ExportActionExecute(Sender: TObject);
procedure FiltrateActionExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure PrintActionExecute(Sender: TObject);
procedure PrintPreviewActionExecute(Sender: TObject);
procedure TabSheetShow(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure RefreshActionExecute(Sender: TObject);
procedure AddNewActionExecute(Sender: TObject);
procedure EditActionExecute(Sender: TObject);
procedure ExitActionExecute(Sender: TObject);
procedure DBGridDblClick(Sender: TObject);
procedure wsbrowsepopnRenameClick(Sender: TObject);
procedure wsbrowsepopDeleteClick(Sender: TObject);
procedure DBGridKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure CustomizeViewActionExecute(Sender: TObject);
procedure ShowChartActionExecute(Sender: TObject);
private
FAllowSort: Boolean;
FFilterDialogList: TList;
FAvailableFields: string;
function CreateQRBuilder: TQRBuilder;
function ExecuteFilterDialog(ADataSet: TDataSet): Boolean;
function GetDataSet: TDataSet;
function GetNextTag: Integer;
protected
{{
在打印 DBGrid 之前会调用 CreateReport
来创建一个报表,之后会在该报表的基础上填充 DBGrid 的内容。
默认情况下会创建一个 TQuickRep 类的报表,子类可 override
该方法来创建合适的报表。
}
function CreateReport: TQuickRep; virtual;
{{
在创建了报表并且在报表上填充 DBGrid
的内容之后,在打印输出之前会调用该方法以允许子类进一步控制报表的其他细节。
}
procedure InitReport(Report: TQuickRep); virtual;
function CreateEditForm: TWSEditForm; virtual;
function GetEditParams: Variant; virtual;
procedure RefreshAvailableFields;
public
procedure Print(Preview: Boolean = False; ShowSetupDialog: Boolean = False);
{{
调用 RefreshDataSet 方法来刷新当前显示的 DataSet。
}
procedure RefreshDataSet;
{{
使用 AllowSort 来控制是否允许在用户用鼠标点击 DBGrid 的标题栏时自动对
DataSet 进行排序。
}
property AllowSort: Boolean read FAllowSort write FAllowSort;
{{
读 DataSet 来取得当前所显示的数据集
}
property DataSet: TDataSet read GetDataSet;
end;
implementation
uses CommonDM, WSUtils, WSSecurity, Clipbrd, WSCustomRpt, WSChart;
{$R *.dfm}
{
****************************** TBrowseForm ******************************
}
function TWSBrowseForm.CreateQRBuilder: TQRBuilder;
begin
Result := TQLDBGridReportBuilder.Create(Self);
with TQLDBGridReportBuilder(Result) do
begin
DBGrid := Self.DBGrid;
AutoWidth := True;
Report := CreateReport;
AutoOrientation := False;
Report.ReportTitle := Self.Caption;
end;
end;
function TWSBrowseForm.CreateReport: TQuickRep;
begin
Result := TWSCustomReport.Create(Self);
Result.PreviewInitialState := wsMaximized;
end;
procedure TWSBrowseForm.DBGridTitleClick(Column: TColumn);
const
IndexFieldNamesProp = 'IndexFieldNames';
var
SortStr, OldSortStr: string;
begin
if FAllowSort and (Column.Field <> nil) and IsPublishedProp(Column.Field.DataSet, IndexFieldNamesProp) then
with Column do
begin
if Field.Lookup then SortStr := Field.KeyFields // Lookup 字段根据其关键字段排序
else if Field.Calculated then
// 计算字段不能排序
else SortStr := Field.FieldName;
OldSortStr := GetStrProp(Field.DataSet, IndexFieldNamesProp);
if SortStr = OldSortStr then SortStr := SortStr + ' DESC';
SetStrProp(Field.DataSet, IndexFieldNamesProp, SortStr);
end;
end;
procedure TWSBrowseForm.DeleteActionExecute(Sender: TObject);
begin
{ DONE : 添加删除当前选定凭单的代码 }
if DataSet.FieldByName('RecordState').AsString ='提交'
then showmessage('单据已经提交,不能删除!')
else
begin
if MessageBox(Handle, '您真的要删除当前记录吗?',
'请确认', MB_YESNO + MB_ICONQUESTION) = IDYES then
begin
with DataSet do
begin
Edit;
FieldByName('RecordState').AsString := '删除';
Post;
end;
RefreshDataSet;
end;
end;
end;
procedure TWSBrowseForm.DeleteActionUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := not DataSet.IsEmpty;
end;
procedure TWSBrowseForm.EditActionUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := not DataSet.IsEmpty;
end;
function TWSBrowseForm.ExecuteFilterDialog(ADataSet: TDataSet): Boolean;
function GetFilterFields: string;
var
I: Integer;
begin
with ADataSet do
for I := 0 to FieldCount - 1 do
if Fields[I].Visible then Result := Result + Fields[I].FieldName + ';';
end;
type
TDataSetClass = class of TDataSet;
var
I: Integer;
Field: TField;
FilterDialog, NewFilterDialog: TQLDBFilterDialog;
FilterDataSet: TDataSet;
S :string;
begin
FilterDialog := nil;
for I := 0 to FFilterDialogList.Count - 1 do
begin
if TQLDBFilterDialog(FFilterDialogList[I]).DataSet = ADataSet then
begin
FilterDialog := FFilterDialogList[I];
Break;
end;
end;
if FilterDialog = nil then
begin
FilterDialog := TQLDBFilterDialog.Create(Self);
FilterDialog.DataSet := ADataSet;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?