![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как по нажатию кнопки выбрать (multiselect) все строки в DBGrid? [D5]
serg128 © (2004-06-24 13:00:00)Т.е. у меня есть грид, к которому подключен датасет. Мне нужно, чтобы по нажатию на кнопку (Button1) Выбирались (подсвечивались синим) все строки в гриде (у которого установлено св-во multiselect := true;). Подскажите плиз, как это сделать?
Reindeer Moss Eater (2004-06-24 15:59:00) [1]Ну еще OnKeyDown, Up
Reindeer Moss Eater (2004-06-24 15:58:00) [2]Ну а как мне диапазон выделить?
две переменные TBookmark, Метод CompareBookmark, пара флагов и метод Next или Previous
serg128 (2004-06-24 15:50:00) [3]-> Ega23
Ну а как мне диапазон выделить?
Ega23 (2004-06-24 15:41:00) [4]Мне бы ещё выделять по Ctrl+PgDown (как в Excel)
Ну и в чём проблема? OnKeyUp тебе нужно событие.
serg128 (2004-06-24 15:36:00) [5]А у меня обработчик есть на мультиселект.
Мне бы ещё выделять по Ctrl+PgDown (как в Excel)
Соловьев (2004-06-24 15:21:00) [6]ну и зря:) надо было всего-то [9]
serg128 (2004-06-24 15:20:00) [7]Оказывается достаточно было сделать DBGrid->SelectAll();
Всем спасибо :) !!!!
Ega23 (2004-06-24 14:19:00) [8]procedure TRxDBGrid.SelectAll;
var
ABookmark: TBookmark;
begin
if MultiSelect and DataLink.Active then begin
with Datalink.Dataset do begin
if (BOF and EOF) then Exit;
DisableControls;
try
ABookmark := GetBookmark;
try
First;
while not EOF do begin
SelectedRows.CurrentRowSelected := True;
Next;
end;
finally
try
GotoBookmark(ABookmark);
except
end;
FreeBookmark(ABookmark);
end;
finally
EnableControls;
end;
end;
end;
end;
procedure TRxDBGrid.UnselectAll;
begin
if MultiSelect then begin
SelectedRows.Clear;
FSelecting := False;
end;
end;
Reindeer Moss Eater (2004-06-24 14:05:00) [9]Дык и я тоже не тебе, а автору.
:)
Johnmen (2004-06-24 14:04:00) [10]А это я не тебе... :)
На твои высказывания я не возражаю...
Reindeer Moss Eater (2004-06-24 14:02:00) [11]Приведенный пример - обход отмеченных в гриде записей.
Вот мне тупому невдомек. Зачем делать GotoBookMark (предварительно выстроив их список) если заведомо известно что в выделении находятся ВСЕзаписи?
:)
Johnmen (2004-06-24 13:57:00) [12]После запостивания ответа, я прочитал вопрос :)))
(А как же иначе ? :))
Приведенный пример - обход отмеченных в гриде записей.
Reindeer Moss Eater (2004-06-24 13:53:00) [13]И получаешь одинполный проход по датасету вместо двухс программным выделением строк
Reindeer Moss Eater (2004-06-24 13:50:00) [14]Проследи за полетом "инженерской" мысли:
Тебе дают приказ выделить все программно.
Ты вынужден проскроллить весь датасет что бы внести каждую строку в список букмарков.
После чего тебя просят произвести групповую операцию над выделением (ну не для красоты же тебя просили сделать выделение)
Ты за каким-то хреном листаешь свой список букмарков, делаешь для каждой GotoBookmark что бы обработать выделенную запись.
Спрашивается: Зачем?
Когда под кнопкой "выделить все" можно поместить код
first; while not eof do begin dowhatyouwant; newt; end;
Соловьев (2004-06-24 13:50:00) [15]:)
procedure TForm1.Button1Click(Sender: TObject);
begin
with DBGrid1 do begin
Color := clNavy;
Font.Color := clWhite;
end;
end;
Johnmen (2004-06-24 13:49:00) [16]
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: Integer;
s: string;
begin
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
for j := 0 to FieldCount-1 do
begin
if (j>0) then s:=s+', ';
s:=s+Fields[j].AsString;
end;
Listbox1.Items.Add(s);
s:= '';
end;
end;
serg128 (2004-06-24 13:46:00) [17]а где именно? или сбросьте пож-ста пример из D6. Если честно, то я пишу на С++ Builder, просто сайт этот классный!
Johnmen (2004-06-24 13:44:00) [18]>serg128 (24.06.04 13:00)
Не уверен насчет D5, а в D6 есть хороший пример в хелпе...
Reindeer Moss Eater (2004-06-24 13:34:00) [19]Я то же по делу спросил.
Зачем?
serg128 (2004-06-24 13:33:00) [20]я вообщето по делу спрашивал, но можем поспорить, если делать особо нечего.