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

Вниз

Vertical scroll в DbGrid   Найти похожие ветки 

 
Tex ©   (2007-01-31 07:15) [0]

Здравствуйте! Возможен ли скрол DB-грида без изменения текущей записи, мастера?


 
ЮЮ ©   (2007-01-31 09:31) [1]

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


 
Ega23 ©   (2007-01-31 10:18) [2]

Теоретически возможен, если компонент не наследник TCustomDBGrid.
Но вот Eh-овский грид не наследник, а перерисовка видимой области один фиг на события DataLink завязана...


 
Desdechado ©   (2007-01-31 11:27) [3]

Возможен. У меня несколько раз такое случайно получалось. Повторить и определить условия целью не задавался. Но видно это когда указатель текущей записи стоит на одной строке, а синяя подсветка - на другой. Легко достижимо мышиным колесом. В принципе, как-то получалось текущую запись вообще за границы отображения загонять.
Но, повторюсь, задачи такой не ставил и старательно от этого избавлялся.


 
Ega23 ©   (2007-01-31 11:34) [4]


> Возможен. У меня несколько раз такое случайно получалось.
>  Повторить и определить условия целью не задавался. Но видно
> это когда указатель текущей записи стоит на одной строке,
>  а синяя подсветка - на другой. Легко достижимо мышиным
> колесом. В принципе, как-то получалось текущую запись вообще
> за границы отображения загонять.
> Но, повторюсь, задачи такой не ставил и старательно от этого
> избавлялся.
>


Есть такой глюк. Вроде появляется при выставлении опций dgRowSelect и dgMutiSelect и при использовании прокрутки мышью.


 
Tex ©   (2007-01-31 11:38) [5]

Немного уточню как я себе это представляю. Допустим, пользователь выделил мышкой строку N"3 по счету сверху (всего записей пусть 1000). Далее "хватает" за скрол грида и тянет его вниз (пусть в самый конец). Хотелось бы, чтобы та самая третья строка так и оставалась выделенной (т.е. ее не видно, она висит выделенной там себе наверху :-). Просто при скроле текущая запись тоже меняется, а этого бы не хотелось. Скроллбар ДБгрида нужен только как инструмент просмотра вверх-вниз, без непосредственного "пробегания" по записям (и соответственно изменения текущей). Подскажите как реализовать это, заранее спасибо!


 
Ega23 ©   (2007-01-31 11:41) [6]

DBGrid.Options -> dgRowSelect и dgMutiSelect
+ SelectedCount + SeeAlsow

Где-то есть пример, если не долго надо будет искать, то найду...


 
Ega23 ©   (2007-01-31 11:43) [7]

Из Delphi Help :

The following example copies the selected rows in a db grid to a list box.

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;


 
Tex ©   (2007-01-31 11:43) [8]

Благодарю за ответ! Посмотрите пожалуйста!


 
Tex ©   (2007-01-31 11:46) [9]

Немного не ясно, а причем тут перенос в ListBox? Вы предлагаете использовать его чтоли в место дб-грид. Поясните плз.


 
Ega23 ©   (2007-01-31 11:53) [10]


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, Db, ADODB, Grids, DBGrids;

type
 TForm1 = class(TForm)
   DBGrid1: TDBGrid;
   ADOConnection1: TADOConnection;
   ADODataSet1: TADODataSet;
   DataSource1: TDataSource;
   Button1: TButton;
   Button2: TButton;
   Label1: TLabel;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
ADODataSet1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Label1.Caption := IntToStr(DBGrid1.SelectedRows.Count);
end;

end.


У DBGrid.Options свойство dgMultiSelect выстави в True.
Выделять с зажатым Control


 
Tex ©   (2007-01-31 12:51) [11]


> У DBGrid.Options свойство dgMultiSelect выстави в True.Выделять
> с зажатым Control


Да я знаю как выделять несколько строк, но причем тут это? Речь же вообще не об этом. У меня отключен в DBgrid.Options мультиселект, он мне не нужен!

Да и

> Label1.Caption := IntToStr(DBGrid1.SelectedRows.Count);

тоже...

Пожалуйста ответьте по теме. Представим 1 форму и 1 Dbgrid (С подключенной базой) без чего либо типа listbox, label и т.п. Так вот.
Сабж - можно ли отменить не нужное мне свойство - изменение текущей строки при скролировании собственным скролом DBGrid"a, т.е. чтобы при прокручивании скролом (таская бегунок его мышкой), в окне DBGrida единожды установленное выделение строки так и оставалось на этом номере записи. Т.е. щелкаем мышкой на 1 запись. Прокручиваем бегунок скрола куда угодно, например, вконец, потом - назад, и видим, что первая строка так и осталась там выделенной (текущей), а не так как по стандарту - текущая строка носится след за скролом!


 
ЮЮ ©   (2007-01-31 13:16) [12]

Сказали же, что нельзя, ибо текущая запись находится среди записей DataLink-а.
Остается сделать DBGrid таклй высоты, чтобы вошел весь НД, а его поместить в ScrollBox. Но это, ИМХО, извращение. Зачем, скажи, пользователю, шарясь по тысячам записей поннить, где он  последний раз кликал по гриду? Если пользоватьель хочет быструю навигацию в определенное место, дай ему понятный интерфейс создания закладок и перемещения по ним.


 
Ega23 ©   (2007-01-31 13:21) [13]


> Прокручиваем бегунок скрола куда угодно, например, вконец,
>  потом - назад, и видим, что первая строка так и осталась
> там выделенной (текущей), а не так как по стандарту - текущая
> строка носится след за скролом!


Нет. Почему - очень долго объяснять. Для этого тебе сначала надо понять взаимодействие DB-Aware контрола с набором данных. Т.е. всю связку TDataSet -> TdataSource -> TDataLink -> Отрисовка данных в контроле.

Если вкратце, то DBGrid "берёт" от DataSet в данный момент времени только те данные, которые находятся в области отрисовки грида. Например, выборка у тебя - 100 записей. Фонт грида и его высота такие, что в нём помещается не больше, например, 20 записей за раз. Так вот, он (DBGrid) в этот момент "знает" только об этих записях. Если хочешь увидеть следующую порцию, то гриду надо "подсосать" эти данные из DataSet. А это приведёт к сдвигу курсора на DataSet"е.

Вариант один: писать потомка TCustomGrid, с собственной реализацией TDataLink, такой, чтобы он брал сразу ВСЕ данные из набора данных и держал их у себя в памяти.
Сам понимаешь, при больших выборках памяти может жрать просто немеряно.


 
Tex ©   (2007-01-31 13:22) [14]

Да я думал про огромный скроллбокс, но тоже считаю извращением. Жаль что нельзя, думал что-то можно придумать. Ладно, пожалуй, попробую с закладками. Все равно, спасибо за ответы!


 
Ega23 ©   (2007-01-31 13:22) [15]


> Остается сделать DBGrid таклй высоты, чтобы вошел весь НД,
>  а его поместить в ScrollBox.


Ну или так. Но это изврат, согласен с ЮЮ ©.



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

Форум: "Базы";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.05 c
1-1172747769
r9000
2007-03-01 14:16
2007.04.22
Разность между двумя датами?


15-1175222220
Slider007
2007-03-30 06:37
2007.04.22
С днем рождения ! 30 марта


2-1175586143
Woolen
2007-04-03 11:42
2007.04.22
CreateOleObject


6-1161869306
Axis_of_Evil
2006-10-26 17:28
2007.04.22
TWSocket. как получить уведомление о невозможности соединения?


15-1175261982
Andre_s
2007-03-30 17:39
2007.04.22
ЖК мониторы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский