Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как по нажатию кнопки выбрать (multiselect) все строки в DBGrid? [D5]


Страницы:   1 2

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]

я вообщето по делу спрашивал, но можем поспорить, если делать особо нечего.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо