Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: август 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



DbGrid и множественный выбор

Разговор ламера (Л) с программером (П):
П: - Ну как, в этом чате дырок много?
Л: - Да, я уже с двумя познакомился!

При включении флажка [dgMultiSelect] в свойстве-наборе Options компонента DBGrid, вы добавляете к табличной сетке возможность множественного выбора записей.

Выбранные вами записи представлены в виде закладок и храняться в свойстве SelectedRows.

Свойство SelectedRows является объектом, имеющим тип TBookmarkList. Его свойства и методы описаны ниже.


 // property SelectedRows: TBookmarkList read FBookmarks;
 
 //   TBookmarkList = class
 //   public
 
 {* Метод Clear освобождает все выбранные в DBGrid записи *}
 // procedure Clear;
 
 {* Метод Delete удаляет все выбранные строки из набора данных *}
 // procedure Delete;
 
 {* Метод Find определяет наличие закладки в выбранном списке. *}
 // function  Find(const Item: TBookmarkStr;
 //      var Index: Integer): Boolean;
 
 {* Метод IndexOf возвращает индекс закладки, расположенной в свойстве Items. *}
 // function IndexOf(const Item: TBookmarkStr): Integer;
 
 {* Метод Refresh возвращает логическую величину, уведомляющую о том, ч
 то в то время, пока в табличной сетке была выбрана запись, были добавлены
 (удалены) какие-то данные. Метод Refresh может быть использован для
 обновления списка выбранных записей для уменьшения возможности получения
 удаленной записи. *}
 // function Refresh: Boolean;  True = orphans found
 
 {* Свойство Count возвращает количество выбранных в настоящий
 момент элементов в DBGrid *}
 // property Count: Integer read GetCount;
 
 {* Свойство CurrentRowSelected содержит логическую величину,
 зависящую от того, выбрана текущая строка или нет. *}
 // property CurrentRowSelected: Boolean
 //      read GetCurrentRowSelected
 //      write SetCurrentRowSelected;
 
 {* Свойство Items - TStringList 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}
 
 //Пример использования свойства Count
 
 procedure TForm1.CountClick(Sender: TObject);
 begin
   if DBgrid1.SelectedRows.Count > 0 then
   begin
     showmessage(inttostr(DBgrid1.SelectedRows.Count));
   end;
 end;
 
 //Пример использования свойства CurrentRowSelected
 
 procedure TForm1.SelectedClick(Sender: TObject);
 begin
   if DBgrid1.SelectedRows.CurrentRowSelected then
     showmessage('Выбрана');
 end;
 
 //Пример использования метода Clear
 
 procedure TForm1.ClearClick(Sender: TObject);
 begin
   dbgrid1.SelectedRows.Clear;
 end;
 
 //Пример использования метода Delete
 
 procedure TForm1.DeleteClick(Sender: TObject);
 begin
   DBgrid1.SelectedRows.Delete;
 end;
 
 {*
 Данные пример проходит в цикле все выбранные
 записи табличной сетки и отображает второе
 поле набора данных.
 
 Метод DisableControls используется в случае,
 когда необходимо запретить обновление DBGrid
 при изменении набора данных. Последняя позиция
 набора данных сохраняется как TBookmark.
 
 Метод IndexOf вызывается при необходимости
 проверить существование закладки.
 Решение использовать метод IndexOf, а не
 Refresh, должно приниматься исходя из
 специфики приложения.
 *}
 
 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;
 
 {*
 Данный пример позволит вам установить закладку и
 затем найти ее в списке выбранных записей
 компонента DBGrid.
 *}
 
 //Устанавливаем закдадку
 
 procedure TForm1.GetBookMarkClick(Sender: TObject);
 begin
   Bookmark1 := DBGrid1.Datasource.Dataset.GetBookmark;
 end;
 
 //Освобождаем закладку
 
 procedure TForm1.FreeBookmarkClick(Sender: TObject);
 begin
   if assigned(Bookmark1) then
   begin
     DBGrid1.Datasource.Dataset.FreeBookmark(Bookmark1);
     Bookmark1 := nil;
   end;
 end;
 
 //Испольуем метод Find для установления позиции
 //записи-закладки в списке выбранных записей компонента 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.
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS