Разговор ламера (Л) с программером (П):
П: - Ну как, в этом чате дырок много?
Л: - Да, я уже с двумя познакомился!
При включении флажка [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;
interfaceuses
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}//Пример использования свойства Countprocedure TForm1.CountClick(Sender: TObject);
beginif DBgrid1.SelectedRows.Count > 0 thenbegin
showmessage(inttostr(DBgrid1.SelectedRows.Count));
end;
end;
//Пример использования свойства CurrentRowSelectedprocedure TForm1.SelectedClick(Sender: TObject);
beginif DBgrid1.SelectedRows.CurrentRowSelected then
showmessage('Выбрана');
end;
//Пример использования метода Clearprocedure TForm1.ClearClick(Sender: TObject);
begin
dbgrid1.SelectedRows.Clear;
end;
//Пример использования метода Deleteprocedure 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 doif Count > 0 thenbegin
TempBookmark := DBGrid1.Datasource.Dataset.GetBookmark;
for x := 0 to Count - 1 dobeginif IndexOf(Items[x]) > -1 thenbegin
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);
beginif assigned(Bookmark1) thenbegin
DBGrid1.Datasource.Dataset.FreeBookmark(Bookmark1);
Bookmark1 := nil;
end;
end;
//Испольуем метод Find для установления позиции//записи-закладки в списке выбранных записей компонента DBGridprocedure TForm1.FindClick(Sender: TObject);
beginif assigned(Bookmark1) thenbeginif DBGrid1.SelectedRows.Find(TBookMarkStr(Bookmark1), z) then
showmessage(inttostr(z));
end;
end;
end.
Конверсация между разработчиком (L) и программистом (P) проходит следующим образом:
P: - Вы знаете, когда вы устанавливаете флаг [dgMultiSelect] в свойстве Options компонента DBGrid, это позволяет делать множественный выбор записей.
L: - Да! Свойство SelectedRows - это объект TBookmarkList. Его свойства и методы описаны ниже.
Конверсация затем фокусируется на свойствах и методах свойства SelectedRows:
P: - Что делает метод Clear?
L: - Он очищает все выбранные записи в DBGrid.
P: - И что о методе Delete?
L: - Он удаляет все выбранные строки из датасета.
В ходе конверсации также предоставляются примеры кода, демонстрирующие использование этих свойств и методов. Например, свойство Count можно использовать для получения количества выбранных записей:
Конверсация также касается использования методов Clear, Delete и других. Например, обработчик события SelectClick использует эти методы для перебора всех выбранных записей:
Конверсация заканчивается кратким обсуждением использования методов GetBookmark, FreeBookmark и Find.
DbGrid и множественный выбор: компонент DBGrid позволяет выбирать несколько записей, а также использовать свойства и методы для управления выбором.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.