Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

Как по нажатию кнопки выбрать (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.031 c
1-1088883291
NeVIP.
2004-07-03 23:34
2004.07.18
Динамический массив : Присвоение


14-1088512308
Kolyan
2004-06-29 16:31
2004.07.18
Линукс и Фат разделы


1-1089050149
tea
2004-07-05 21:55
2004.07.18
Не могу найти аналог «Symbol…» из BP7


1-1088142740
igorol
2004-06-25 09:52
2004.07.18
Недоступны ярлыки печати в QReport


14-1088626071
Мазут Береговой
2004-07-01 00:07
2004.07.18
Сурьёзеый вопрос на ентот раз.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский