Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Как по нажатию кнопки выбрать (multiselect) все строки в DBGrid?   Найти похожие ветки 

 
serg128   (2004-06-24 13:00) [0]

Т.е. у меня есть грид, к которому подключен датасет. Мне нужно, чтобы по нажатию на кнопку (Button1) Выбирались (подсвечивались синим) все строки в гриде (у которого установлено св-во multiselect := true;). Подскажите плиз, как это сделать?


 
Reindeer Moss Eater ©   (2004-06-24 13:19) [1]

А зачем?


 
serg128   (2004-06-24 13:22) [2]

Надо, приказ.


 
Reindeer Moss Eater ©   (2004-06-24 13:25) [3]

Спорим, что не надо?


 
serg128   (2004-06-24 13:33) [4]

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


 
Reindeer Moss Eater ©   (2004-06-24 13:34) [5]

Я то же по делу спросил.
Зачем?


 
Johnmen ©   (2004-06-24 13:44) [6]

>serg128   (24.06.04 13:00)  

Не уверен насчет D5, а в D6 есть хороший пример в хелпе...


 
serg128   (2004-06-24 13:46) [7]

а где именно? или сбросьте пож-ста пример из D6. Если честно, то я пишу на С++ Builder, просто сайт этот классный!


 
Johnmen ©   (2004-06-24 13:49) [8]

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;


 
Соловьев ©   (2004-06-24 13:50) [9]

:)

procedure TForm1.Button1Click(Sender: TObject);
begin
       with DBGrid1 do begin
       Color := clNavy;
       Font.Color := clWhite;
       end;
end;



 
Reindeer Moss Eater ©   (2004-06-24 13:50) [10]

Проследи за полетом "инженерской" мысли:

Тебе дают приказ выделить все программно.
Ты вынужден проскроллить весь датасет что бы внести каждую строку в список букмарков.
После чего тебя просят произвести групповую операцию над выделением (ну не для красоты же тебя просили сделать выделение)
Ты за каким-то хреном листаешь свой список букмарков, делаешь для каждой GotoBookmark что бы обработать выделенную запись.

Спрашивается: Зачем?

Когда под кнопкой "выделить все" можно поместить код
first; while not eof do begin dowhatyouwant; newt; end;


 
Reindeer Moss Eater ©   (2004-06-24 13:53) [11]

И получаешь один полный проход по датасету вместо двух с программным выделением строк


 
Johnmen ©   (2004-06-24 13:57) [12]

После запостивания ответа, я прочитал вопрос :)))
(А как же иначе ? :))

Приведенный пример - обход отмеченных в гриде записей.


 
Reindeer Moss Eater ©   (2004-06-24 14:02) [13]

Приведенный пример - обход отмеченных в гриде записей.

Вот мне тупому невдомек. Зачем делать GotoBookMark (предварительно выстроив их список) если заведомо известно что в выделении находятся ВСЕ записи?

:)


 
Johnmen ©   (2004-06-24 14:04) [14]

А это я не тебе... :)
На твои высказывания я не возражаю...


 
Reindeer Moss Eater ©   (2004-06-24 14:05) [15]

Дык и я тоже не тебе, а автору.

:)


 
Ega23 ©   (2004-06-24 14:19) [16]

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;


 
serg128   (2004-06-24 15:20) [17]

Оказывается достаточно было сделать DBGrid->SelectAll();

Всем спасибо :) !!!!


 
Соловьев ©   (2004-06-24 15:21) [18]

ну и зря:) надо было всего-то [9]


 
serg128   (2004-06-24 15:36) [19]

А у меня обработчик есть на мультиселект.

Мне бы ещё выделять по Ctrl+PgDown (как в Excel)


 
Ega23 ©   (2004-06-24 15:41) [20]

Мне бы ещё выделять по Ctrl+PgDown (как в Excel)

Ну и в чём проблема? OnKeyUp тебе нужно событие.


 
serg128   (2004-06-24 15:50) [21]

-> Ega23
Ну а как мне диапазон выделить?


 
Reindeer Moss Eater ©   (2004-06-24 15:58) [22]

Ну а как мне диапазон выделить?

две переменные TBookmark, Метод CompareBookmark, пара флагов и метод Next или Previous


 
Reindeer Moss Eater ©   (2004-06-24 15:59) [23]

Ну еще OnKeyDown, Up



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.045 c
4-1086376641
k@rt
2004-06-04 23:17
2004.07.18
Как обновить реестр?


6-1084549441
Nic2
2004-05-14 19:44
2004.07.18
Запуск exe по сети


1-1088748871
Роман
2004-07-02 10:14
2004.07.18
Исключения


1-1089190623
CyberSpy2
2004-07-07 12:57
2004.07.18
Перемещение


6-1084653729
Alex_von_Fos
2004-05-16 00:42
2004.07.18
Ссылки из WebBrowser