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

Вниз

Помогите с DBGrid!   Найти похожие ветки 

 
alexander_ua   (2003-01-17 15:22) [0]

В гриде помещаются не все поля. При использовании прокрутки (горизонтальной) после переоткрытия Query (close-open) полосы прокрутки возвращаются в прежнее положение. Т.е. например у меня есть 10 полей, в видимой области грида - поля 1-6. Делаю прокрутку, чтобы видеть поля 4-9. После переоткрытия датасета снова вижу поля 1-6, а нужно ведь 4-9!!!
Извиняюсь за настырность, вопрос уже задавал, но так и не получил вразумительного ответа.


 
MsGuns   (2003-01-17 15:37) [1]

Нормальная реакция Датасета на переоткрытие. Чтобы встать туда, где стоял, используй Locate или FindFirst


 
alexander_ua   (2003-01-17 15:44) [2]

СТОП!!! Я не о вертикальном, а о горизонтальном перемещении!!!


 
Reindeer Moss Eater   (2003-01-17 15:52) [3]

Перед закрытием датасета запоминай SelectedIndex у грида
После открытия датасета восстанавливай SelectedIndex.


 
MsGuns   (2003-01-17 16:15) [4]

Пардон, невнимательно прочитал.
Тогда >Reindeer Moss Eater (17.01.03 15:52) или SelectedField того же грида


 
MsGuns   (2003-01-17 16:15) [5]

Пардон, невнимательно прочитал.
Тогда >Reindeer Moss Eater (17.01.03 15:52) или SelectedFields того же грида


 
alexander_ua   (2003-01-17 16:16) [6]

У меня поле SelectedIndex почему-то всегда равно нулю...


 
Delirium^.Tremens   (2003-01-17 16:24) [7]

Это потому, возможно, что у грида в опциях dgRowSelect


 
alexander_ua   (2003-01-17 16:25) [8]

С полями SelectedIndex и SelectedFields беда. Во-первых потому, что у меня свойство dgrowselect=True у грида, т.е. выделяю не отдельные ячейки а целые записи, а указанным полям нужен именно onclick по соответствующем поле. Также не подходит потому, что мне нужно знать не какое поле выделено, а какое находилось на первом месте до переоткрытия dataset. Надеюсь, изложил понятно...
Помогите, пожалуйста!


 
Delirium^.Tremens   (2003-01-17 16:28) [9]

Отключить RowSelect перед закрытием, запомнить индекс, закрыть, открыть, установить в поле, включить RowSelect.


 
alexander_ua   (2003-01-17 16:38) [10]

к сожалению тоже не то, потому что я могу вообще не делать клик по какому либо полю, соответственно опять будут нулевыми указанные параметры. Мне бы знать с какого столбца (поля) начинается диапазон полей, показываемых в видимой части грида (например в текущий момент отображаются поля 3-7 (из моих десяти), вот мне и нужно знать, что первое отображаемое поле - 3, а потом суметь к нему переместиться).
Извиняюсь за настырность, но это действительно важная проблема.


 
Delirium^.Tremens   (2003-01-17 16:42) [11]

А ты не пробовал выставить первым полем (напрмер 4), а потом сделать вертикальный Scroll? Что будет?


 
alexander_ua   (2003-01-17 17:01) [12]

Пробовал. Но после вертикального скрула опять все плохо - первым видимым поле становится 1, а не 4...


 
AM   (2003-01-17 17:02) [13]

Я думаю, что в данном случаи, если пользоваться стандатным ДБГридом, то надо играть на собитии
Procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);

с помощью него получать список полей, которые отображаются в данный момент.
Я так понимаю, что оно возникает только для тех колонок, которые отображаются в данный момент на экране... или нет?


 
Delirium^.Tremens   (2003-01-17 17:05) [14]

alexander_ua (17.01.03 17:01)

> Пробовал. Но после вертикального скрула опять все плохо
> - первым видимым поле становится 1, а не 4...

Так я же тебе на это и намекал :-)


 
alexander_ua   (2003-01-17 17:10) [15]

А как поймать это событие и правильно его обработать?
>Я думаю, что в данном случаи, если пользоваться стандатным >ДБГридом, то надо играть на собитии
>Procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const >Rect: TRect; DataCol: Integer; Column: TColumn; State: >TGridDrawState);

Delirium^.Tremens Сорри, но не понял намек...


 
AM   (2003-01-17 17:23) [16]

Надо завести какой-нибудь TStringList, очистить его перед тем как сделать обновление, спровоцировать, чтобы возникла перерисовка всех видимых колонок, а потом добавлять в массив имена колонок которые были перерисованы, предварительно проверить, есть ли уже в нем такое поле:
Procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var
strL: TStringList;

....

strL.Add(Column.FieldName);

после этого проверить, каких полей нет в strL - те и не видемы.


 
alexander_ua   (2003-01-17 17:27) [17]

Хорошо, таким образом я поймаю поля, которые не видимы. Но как мне потом отобразить именно те поля, которые были видны перед обновлением ?


 
AM   (2003-01-17 17:42) [18]

Только strL: TStringList; - глобальная переменная!!!

>Хорошо, таким образом я поймаю поля, которые не видимы. Но как
>мне потом отобразить именно те поля, которые были видны перед
>обновлением ?

А вот это тебе надо будет просуммировать все ширины колонок твоего грида и сравнить с размером самого грида и исходя из этого решать надо ли переходить (с помощью SelectedIndex) к примеру на 6-ю колонку, чтобы колонки сдвинулись и начиная с 3-ей все были видны...
довольно нудно, но в принципе решимо...

тут есть еще проблемка понять, когда закончила перерисовываться последняя ячейка, чтобы начать проверку списка полей...

это в принципе все теория надо на практике посмотреть как будет...


 
Reindeer Moss Eater   (2003-01-17 17:47) [19]

(с помощью SelectedIndex)
У него RowSelect опция включена. Сказали же уже.


 
alexander_ua   (2003-01-17 17:52) [20]

вобщем так. с помощью DBGrid1DrawColumnCell я выловил поле, которое первым отображается в гриде до обновления. Остается узнать как после обновления сразу же перейти к этому полю. Сразу же говорю, что RowSelect включена и SelectedFields (SelectedIndex) неприменимы.


 
Reindeer Moss Eater   (2003-01-17 17:56) [21]

Посылай гриду нажатия "->". Или откажись от RowSelect


 
alexander_ua   (2003-01-17 18:03) [22]

как посылать???? ведь это и интересует


 
AM   (2003-01-17 18:05) [23]

Reindeer Moss Eater (17.01.03 17:47)

Я думаю ее перед обновлением отключить, обновить, все расставить по своим местам ( Locate, SelectedIndex ...) переключить фокус на другой контрол, а потом включить это свойство только на OnEnter у Грида.


 
alexander_ua   (2003-01-17 18:10) [24]

как посылать???? ведь это и интересует
>Reindeer Moss Eater
>Посылай гриду нажатия "->". Или откажись от RowSelect


 
AM   (2003-01-17 18:12) [25]

>> AM (17.01.03 18:05)

сорри обшибся, надо подругому...


 
alexander_ua   (2003-01-17 18:19) [26]

как по-другому? вобщем вопрос теперь стоит так: нужно программно сделать к примеру поле 4 первым из отображаемых в гриде. Если это можно сделать как говорил Reindeer Moss Eater, то как делается программный скрулл?


 
AM   (2003-01-17 18:32) [27]

>> alexander_ua (17.01.03 18:19)

>> программный скрулл?

вот где-то мне попадался он, не могу вспомнить где я читал про это...

ну есть еще совсем тупой подход - скрыть (сделать невидимыми) колонки 1,2 , если к примеру тебе надо отобразить с 3-ей, ну а потом в нужный момент отобразить их...

Но конечно лучше программный скрулл,
а про программный скрул - поищи в архивах форму, наверняка кто-то уже задавал такой вопрос...


 
alexander_ua   (2003-01-17 18:39) [28]

Уж было обрадовался, а там архив здоровенный, меня админ убъет, если я его выкачаю. Может кто вспомнит как программный скрулл делать?


 
TTCustomDelphiMaster   (2003-01-17 21:38) [29]

TCustomGrid.LeftCol - Specifies the index of the first visible scrollable column in the grid.


 
alexander_ua   (2003-01-20 14:28) [30]

TTCustomDelphiMaster © (17.01.03 21:38)

У dbgrid нет свойства LeftCol :).
Я уже даже научился делать программную прокрутку по горизонтали, да вот беда, слишком уж заметна эта прокрутка и рядового пользователя может ввести в полное замешательство... Может есть еще идеи?


 
Reindeer Moss Eater   (2003-01-20 14:31) [31]

Идеи чего?


 
Delirium^.Tremens   (2003-01-20 14:32) [32]

alexander_ua (20.01.03 14:28)

> Может есть еще идеи

Оставить в покое фичи польз. интерфейса и заняться логикой приложения.


 
Reindeer Moss Eater   (2003-01-20 14:35) [33]

За какой надобностью тебе dgRowSelect ?


 
alexander_ua   (2003-01-20 14:42) [34]

dgRowSelect мне затем, что грид я использую не для редактирования, а просто для отображения инфы. Соответственно после выделения записи (строки) и клацанья по какой-либо кнопке открываю окно редактирования.
Вобщем я так понимаю, ответы исчерпаны? Что-то мне не верится, что невозможно сделать то, чего я хочу...


 
Reindeer Moss Eater   (2003-01-20 14:44) [35]

Круто! А другим (более адекватным) способом добиться этого нельзя?


 
alexander_ua   (2003-01-20 15:38) [36]

Reindeer Moss Eater (20.01.03 14:44)
поясни, пожалуйста...


 
Reindeer Moss Eater   (2003-01-20 15:45) [37]

Я так понял, что RowSelect у тебя только для того, что бы пользователь не редактировал данные в гриде?

1. Убираем из опций RowSelect.
2. DBGrid1.ReadOnly:=True;
3. Убираем из опций dgEditing и dgAlwaysShowEditor

4. Начинаем иметь возможность использовать SelectedIndex


 
alexander_ua   (2003-01-20 15:51) [38]

если я правильно понял, таким образом я буду лишен возможности лицезреть выделенную запись, да? Ведь именно для этого у меня и был RowSelect. Выделенным может быть только поле.


 
Reindeer Moss Eater   (2003-01-20 16:04) [39]

Не знаю, что ты там понял, но все записи останутся там, где и были до этого.


 
Романов Р.В.   (2003-01-20 16:05) [40]


> alexander_ua (20.01.03 14:28)
> TTCustomDelphiMaster © (17.01.03 21:38)
>
> У dbgrid нет свойства LeftCol :).


Есть только оно Protected.
Как до него добраться смотри здесь
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1042818718&n=1



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

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

Наверх





Память: 0.54 MB
Время: 0.01 c
3-15486
SeRZh
2003-01-20 18:18
2003.02.06
Новичок


14-15885
Nest
2003-01-19 14:46
2003.02.06
FLASHBACK = Приветствую ВСЕХ!


1-15562
Skywalker
2003-01-28 16:35
2003.02.06
OnKeyDown и звонок


3-15443
Олег
2003-01-20 08:21
2003.02.06
Синтаксис цикла в хранимой процедуре, либо рекурсии


1-15681
Сергей Бушин
2003-01-25 22:01
2003.02.06
Градиент кругленький





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