📄 multiselgrid.pas
字号:
unit MultiSelGrid;
interface
uses Provider,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls, DBCtrls,
ComCtrls, Mask, FormStore, MyGrid, MacroQuery, ADODB, AdoMacroQry,
StoreForm, ADOQry, DBClient;
type
TfrmMultiSelGrid = class(TForm)
DataSource1: TDataSource;
Panel1: TPanel;
DBGrid1: TMyGrid;
Image1: TImage;
Label7: TLabel;
qryList: TClientDataSet;
cmdSelAll: TBitBtn;
cmdUnSel: TBitBtn;
cmdOK: TBitBtn;
cmdCancel: TBitBtn;
procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
procedure DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure cmdSelAllClick(Sender: TObject);
procedure cmdUnSelClick(Sender: TObject);
procedure cmdCancelClick(Sender: TObject);
procedure cmdOKClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function Choose(dsGrid:TDBGrid; tsField:string=''; tsSelValues:string='') :Boolean;
end;
var
frmMultiSelGrid: TfrmMultiSelGrid;
implementation
uses SelfFunc, Main, RptExcel, ZlJjDd;
{$R *.DFM}
function TfrmMultiSelGrid.Choose(dsGrid:TDBGrid; tsField:string=''; tsSelValues:string='') :Boolean;
var dsData :TDataSet;
i :integer;
oField :TField;
begin
dsData :=dsGrid.DataSource.DataSet;
if not dsData.Active then Exit;
if dsData.IsEmpty then Exit;
qryList.Close;
qryList.Filtered :=False;
qryList.Fields.Clear;
qryList.FieldDefs.Clear;
for i :=0 to dsData.FieldCount -1 do
begin
with qryList.FieldDefs.AddFieldDef do
begin
Name := dsData.Fields[i].FieldName;
DataType := dsData.Fields[i].DataType;
oField :=CreateField(qryList);
end;
oField.DisplayLabel :=dsData.Fields[i].DisplayLabel;
oField.DisplayWidth :=dsData.Fields[i].DisplayWidth;
end;
with qryList.FieldDefs.AddFieldDef do
begin
Name := 'Selected';
DataType := ftString;
Size :=1;
oField :=CreateField(qryList);
end;
oField.DisplayLabel :='匡拒';
oField.DisplayWidth :=4;
oField.Alignment :=taCenter;
DBGrid1.Columns.Assign(dsGrid.Columns);
with DBGrid1.Columns.Add do
begin
FieldName :='Selected';
Index :=0;
end;
qryList.CreateDataSet;
dsData.First;
while not dsData.Eof do
begin
qryList.Append;
for i :=dsData.FieldCount -1 downto 0 do
qryList.Fields[i].Value :=dsData.Fields[i].Value;
qryList.Post;
dsData.Next;
end;
Result :=(Self.ShowModal =mrOK);
end;
procedure TfrmMultiSelGrid.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key <>' ' then Exit;
with qryList do
begin
Edit;
if qryList.FieldByName('Selected').AsString ='*' then
qryList.FieldByName('Selected').AsString :=''
else qryList.FieldByName('Selected').AsString :='*';
Post;
end;
end;
procedure TfrmMultiSelGrid.DBGrid1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var oCoord :TGridCoord;
begin
if Button <>mbLeft then Exit;
if qryList.IsEmpty then Exit;
oCoord := DBGrid1.MouseCoord(X, Y);
if (oCoord.X <= 0) or (oCoord.Y <= 0) then Exit;
with qryList do
begin
Edit;
if qryList.FieldByName('Selected').AsString ='*' then
qryList.FieldByName('Selected').AsString :=''
else qryList.FieldByName('Selected').AsString :='*';
Post;
end;
end;
procedure TfrmMultiSelGrid.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if DBGrid1.Canvas.Brush.Color =DBGrid1.Color then
if qryList.FieldByName('Selected').AsString ='*' then
begin
DBGrid1.Canvas.Brush.Color :=clInfoBk;
end;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
procedure TfrmMultiSelGrid.cmdSelAllClick(Sender: TObject);
var SavePlace:TBookMark;
begin
with qryList do
begin
DisableControls;
SavePlace := GetBookmark;
if not qryList.IsEmpty then qryList.First;
while not qryList.Eof do
begin
if qryList.FieldByName('Selected').AsString <>'*' then
begin
qryList.Edit;
qryList.FieldByName('Selected').AsString :='*';
qryList.Post;
end;
qryList.Next;
end;
try
GotoBookmark(SavePlace);
Except
Last;
end;
FreeBookmark(SavePlace);
EnableControls;
end;
end;
procedure TfrmMultiSelGrid.cmdUnSelClick(Sender: TObject);
var SavePlace:TBookMark;
begin
with qryList do
begin
DisableControls;
SavePlace := GetBookmark;
if not qryList.IsEmpty then qryList.First;
while not qryList.Eof do
begin
qryList.Edit;
if qryList.FieldByName('Selected').AsString ='*' then
qryList.FieldByName('Selected').AsString :=''
else qryList.FieldByName('Selected').AsString :='*';
qryList.Post;
qryList.Next;
end;
try
GotoBookmark(SavePlace);
Except
Last;
end;
FreeBookmark(SavePlace);
EnableControls;
end;
end;
procedure TfrmMultiSelGrid.cmdCancelClick(Sender: TObject);
begin
Close;
end;
procedure TfrmMultiSelGrid.cmdOKClick(Sender: TObject);
begin
qryList.Filter :='Selected=''*''';
qryList.Filtered :=True;
if qryList.IsEmpty then
begin
MsgBox('叫匡拒
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -