Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[502] [답변] PANASYS/DBGrid MutiSelect
sickchic [ ] 3105 읽음    1997-12-31 22:03
   
    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.
   
   


+ -

관련 글 리스트
502 [답변] PANASYS/DBGrid MutiSelect sickchic 3105 1997/12/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.