DBGrid에서 멀티셀렉션을 하는 방법입니다..
델파이 웹사이트에서 퍼왔습니다..
(음.. 찾으려는건 찾지도 못하고.. 엄한 것 만.. 쩝..)
아래에 설명과 함께.. 실제 코드도 있습니다..
(델파이 웹사이트에서 받아온 코드.. 자료실에 올리려고 했는데
회원이 아니라 못 올리네요.. 필요하시면 볼렌드 웹사이트에서
받으시거나 메일 주시면 메일로 보내드리지요..)
저도 아래의 방법을 응용해 사용하고 있는데..
잘 동작 합니다..
기람..
미친병아리 서비였네용.. 삐약~ !!
Using Multiselect Database Grids in Delphi 2.0
---------------------------------------------------------------------------
W hen you add [dgMultiSelect] to the Options property of a DBGrid, you give
yourself the ability to select multiple records within the grid.
The records you select are represented as bookmarks and are stored in the
SelectedRows property.
The SelectedRows property is an object of type TBookmarkList. The
properties and methods are described below.
Click here to download an example.
---------------------------------------------------------------------------
property SelectedRows: TBookmarkList read FBookmarks;
TBookmarkList = class
public
{* The Clear method will free all the selected records
within the DBGrid *}
procedure Clear;
{* The Delete method will delete all the selected rows
from the dataset *}
procedure Delete;
{* The Find method determines whether a bookmark is
in the selected list. *}
function Find(const Item: TBookmarkStr;
var Index: Integer): Boolean;
{* The IndexOf method returns the index of the
bookmark within the Items property. *}
function IndexOf(const Item: TBookmarkStr): Integer;
{* The Refresh method returns a boolean value to notify
whether any orphans were dropped (deleted) during the
time the record has been selected in the grid. The
refresh method can be used to update the selected list
to minimize the possibility of accessing a deleted
record. *}
function Refresh: Boolean; True = orphans found
{* The Count property returns the number of currently
selected items in the DBGrid *}
property Count: Integer read GetCount;
{* The CurrentRowSelected property returns a boolean
value and determines whether the current row is
selected or not. *}
property CurrentRowSelected: Boolean
read GetCurrentRowSelected
write SetCurrentRowSelected;
{* The Items property is a TStringList of
TBookmarkStr *}
property Items[Index: Integer]: TBookmarkStr
read GetItem; default;
end;
---------------------------------------------------------------------------
{*
When you add [dgMultiSelect] to the Options
property of a DBGrid, you give yourself the ability
to select multiple records within the grid.
The records you select are represented as bookmarks
and are stored in the SelectedRows property.
The SelectedRows property is an object of type
TBookmarkList. The properties and methods are
described below.
*}
// property SelectedRows: TBookmarkList read FBookmarks;
// TBookmarkList = class
// public
{* The Clear method will free all the selected records
within the DBGrid *}
// procedure Clear;
{* The Delete method will delete all the selected rows
from the dataset *}
// procedure Delete;
{* The Find method determines whether a bookmark is
in the selected list. *}
// function Find(const Item: TBookmarkStr;
// var Index: Integer): Boolean;
{* The IndexOf method returns the index of the
bookmark within the Items property. *}
// function IndexOf(const Item: TBookmarkStr): Integer;
{* The Refresh method returns a boolean value to notify
whether any orphans were dropped (deleted) during the
time the record has been selected in the grid. The
refresh method can be used to update the selected list
to minimize the possibility of accessing a deleted
record. *}
// function Refresh: Boolean; True = orphans found
{* The Count property returns the number of currently
selected items in the DBGrid *}
// property Count: Integer read GetCount;
{* The CurrentRowSelected property returns a boolean
value and determines whether the current row is
selected or not. *}
// property CurrentRowSelected: Boolean
// read GetCurrentRowSelected
// write SetCurrentRowSelected;
{* The Items property is a TStringList of
TBookmarkStr *}
// property Items[Index: Integer]: TBookmarkStr
// read GetItem; default;
// end;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, DB, DBTables;
type
TForm1 = class(TForm)
Table1: TTable;
DBGrid1: TDBGrid;
Count: TButton;
Selected: TButton;
Clear: TButton;
Delete: TButton;
Select: TButton;
GetBookMark: TButton;
Find: TButton;
FreeBookmark: TButton;
DataSource1: TDataSource;
procedure CountClick(Sender: TObject);
procedure SelectedClick(Sender: TObject);
procedure ClearClick(Sender: TObject);
procedure DeleteClick(Sender: TObject);
procedure SelectClick(Sender: TObject);
procedure GetBookMarkClick(Sender: TObject);
procedure FindClick(Sender: TObject);
procedure FreeBookmarkClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Bookmark1: TBookmark;
z: Integer;
implementation
{$R *.DFM}
//Example of the Count property
procedure TForm1.CountClick(Sender: TObject);
begin
if DBgrid1.SelectedRows.Count > 0 then
begin
showmessage(inttostr(DBgrid1.SelectedRows.Count));
end;
end;
//Example of the CurrentRowSelected property
procedure TForm1.SelectedClick(Sender: TObject);
begin
if DBgrid1.SelectedRows.CurrentRowSelected then
showmessage('Selected');
end;
//Example of the Clear Method
procedure TForm1.ClearClick(Sender: TObject);
begin
dbgrid1.SelectedRows.Clear;
end;
//Example of the Delete Method
procedure TForm1.DeleteClick(Sender: TObject);
begin
DBgrid1.SelectedRows.Delete;
end;
{*
This example iterates through the selected rows
of the grid and displays the second field of
the dataset.
The Method DisableControls is used so that the
DBGrid will not update when the dataset is changed.
The last postition of the dataset is saved as
a TBookmark.
The IndexOf method is called to check whether or
not the bookmark is still existant.
The decision of using the IndexOf method rather
than the Refresh method should be determined by the
specific application.
*}
procedure TForm1.SelectClick(Sender: TObject);
var
x: word;
TempBookmark: TBookMark;
begin
DBGrid1.Datasource.Dataset.DisableControls;
with DBgrid1.SelectedRows do
if Count > 0 then
begin
TempBookmark:= DBGrid1.Datasource.Dataset.GetBookmark;
for x:= 0 to Count - 1 do
begin
if IndexOf(Items[x]) > -1 then
begin
DBGrid1.Datasource.Dataset.Bookmark:= Items[x];
showmessage(DBGrid1.Datasource.Dataset.Fields[1].AsString);
end;
end;
end;
DBGrid1.Datasource.Dataset.GotoBookmark(TempBookmark);
DBGrid1.Datasource.Dataset.FreeBookmark(TempBookmark);
DBGrid1.Datasource.Dataset.EnableControls;
end;
{*
This example allows you to set a bookmark and
and then search for the bookmarked record within
selected a record(s) within the DBGrid.
*}
//Sets a bookmark
procedure TForm1.GetBookMarkClick(Sender: TObject);
begin
Bookmark1:= DBGrid1.Datasource.Dataset.GetBookmark;
end;
//Frees the bookmark
procedure TForm1.FreeBookmarkClick(Sender: TObject);
begin
if assigned(Bookmark1) then
begin
DBGrid1.Datasource.Dataset.FreeBookmark(Bookmark1);
Bookmark1:= nil;
end;
end;
//Uses the Find method to locate the position of the
//bookmarked record within the selected list in the DBGrid
procedure TForm1.FindClick(Sender: TObject);
begin
if assigned(Bookmark1) then
begin
if DBGrid1.SelectedRows.Find(TBookMarkStr(Bookmark1),z) then
showmessage(inttostr(z));
end;
end;
end.
|