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

Вниз

TopRow в DBGrid   Найти похожие ветки 

 
EthernalWonderer   (2005-01-20 16:52) [0]

А не подскажут ли уважаемые Мастера, можно ли прочитать и установить значение TopRow в DBGrid аналогично StringGrid"у?


 
Johnmen ©   (2005-01-20 16:59) [1]

Это как ?


 
Vlad ©   (2005-01-20 17:11) [2]


> EthernalWonderer   (20.01.05 16:52)  

Установить и прочитать можно. Но что тебе это даст кроми глюков на экране?


 
EthernalWonderer   (2005-01-20 17:18) [3]

В StringGrid есть Property TopRow - в нём хранится порядковый номер самой верхней из отображаемых строк. Присваивая этой Property разные значения, можно крутить таблицу вверх - вниз, при этом курсор остаётся в одной и той же ячейке (Col,Row). Точного аналога TopRow у DBGrid нет.

Вот я и справшиваю: нельзя ли иным способом узнать, какая строка по порядку является верхней из отображаемых, и нельзя ли покрутить таблицу вверх - вниз (а также вправо - влево) не меняя положения курсора?


 
EthernalWonderer   (2005-01-20 17:24) [4]

> Vlad ©   (20.01.05 17:11) [2]
В моей задаче достаточно сложно организовать RefreshRecord.
Поэтому приходится делать полный Refresh dataSet"a. (Строк немного, но в окно однозначно не влазят). Хочется делать это незаметно от пользователя, а для этого восстанавливать положение курсора и строк таблицы после перезапроса.


 
sniknik ©   (2005-01-20 17:33) [5]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=806


 
Tormoz   (2005-01-20 17:57) [6]

А вот может кто-нибудь знает,
возможно установить различную высоту строк данных для DBGrid"a ?


 
Johnmen ©   (2005-01-20 18:06) [7]

Нет.


 
Vlad ©   (2005-01-20 18:06) [8]


> Tormoz   (20.01.05 17:57) [6]

В статье приведенной sniknik © это есть.

TMyDBGrid=class(TDBGrid);
В событии OnDrawColumnCell пишем
   TMyDBGrid(Sender).RowHeights[<индекс строки>]:= <значение>;


 
Tormoz   (2005-01-20 18:09) [9]

To Vlad © (20.01.05 18:06) [8]

  Смотри Johnmen ©   (20.01.05 18:06) [7]

Johnmen ©   (20.01.05 18:06) [7]

  Источник Вашего знания, плиз!


 
Vlad ©   (2005-01-20 18:11) [10]


> Tormoz   (20.01.05 18:09) [9]
> To Vlad © (20.01.05 18:06) [8]
>
>   Смотри Johnmen ©   (20.01.05 18:06) [7]

Это типа чё, с мастерами уже и поспорить нельзя? ;-)


 
Tormoz   (2005-01-20 18:18) [11]

To Vlad ©   (20.01.05 18:11) [10]

Да брось Ты!
Я тоже радовался , когда написал:

if MyCondition Then
TStringGrid(MyDBGrid).RowHeights[<индекс строки>]:= <значение>;


И все было прекрасно, пока не начался скроллинг вниз. А дальше Ты, наверное, уже знаешь... :-)


 
Vlad ©   (2005-01-20 18:26) [12]


> Tormoz   (20.01.05 18:18) [11]


> А дальше Ты, наверное, уже знаешь

Угу, знаю. Индекс строки грида вычислять надо, тогда будет все пучком :-)


 
Vlad ©   (2005-01-20 18:38) [13]


> Tormoz   (20.01.05 18:18) [11]

Лови рабочий код :-)

 with TMyDBGrid(Sender) do
 begin
 if DataSource.DataSet.FieldByName("RN").AsInteger=14322 then
    TMyDBGrid(Sender).RowHeights[DataLink.ActiveRecord + 1]:=30
 else
    TMyDBGrid(Sender).RowHeights[DataLink.ActiveRecord + 1]:=DefaultRowHeight;
 DefaultDrawColumnCell(Rect, DataCol, Column, State);
 end;


 
Johnmen ©   (2005-01-20 18:44) [14]

Итак, смотрим вопрос
>возможно установить различную высоту строк данных для DBGrid"a ?
видим два ответа, первый
Нет
второй
TMyDBGrid=class(TDBGrid);
...

замечаем, что появился некий TMyDBGrid.
А в вопросе ничего не было про использование вспомогательных классов.

Вот такое имхо :)


 
Vlad ©   (2005-01-20 18:52) [15]


> Johnmen ©   (20.01.05 18:44) [14]

Эх, выкрутился ;-)


 
Alex_S   (2005-01-20 19:02) [16]

>Хочется делать это незаметно от пользователя, а для этого восстанавливать положение курсора и строк таблицы после перезапроса.
--------
Об одном и том же. Второй раз за день, третий - за 2 недели.
Первым в этом году был я, и этот вопрос у меня решен.
Найди меня и внимательно до конца прочитай ветку.
<<
Восстановление строк DBGrid после перезагрузки таблицы TQuery. [D7, Paradox]
Alex_S   (04.01.05 21:04)  
>>
Но лучше всего и проще, если есть возможность бегать по таблице в другом DataSete, то так и надо делать, а потом вовращаться к DBGrid. А вот если действительно надо перезагружать измененные строки и оставаться на месте, то это - то самое...


 
Vlad ©   (2005-01-20 19:05) [17]


> Alex_S   (20.01.05 19:02) [16]


а ссылку привести слабо, вот так например ? :-)
http://delphimaster.net/view/3-1104861881/

И еще, то что там написано (ИМХО) образец того как не надо делать.


 
Alex_S   (2005-01-20 19:12) [18]

Лень искать, а текст у меня отдельно хранится. Так что не надо меня совсем ламером считать :-(.
Просто храню хорошие решения в определенной папке.
Но теперь и ссылку запишу, однако


 
Alex_S   (2005-01-20 19:15) [19]

А надо или нет, ему решать. Тебе не нравится, а нам пойдет. Но то, что он затеял - искать TopRow - не выйдет, уже пройденный этап. Лучше 2 набора. А то, что у меня - уже в исключительном случае. И то бояться его не найдо, если с умом всё делать.


 
EthernalWonderer   (2005-01-21 09:49) [20]

> Alex_S   (20.01.05 19:12) [16]
Спасибо за ссылку, я уже читал эту ветку до того,как задать вопрос. Откровенно говоря, у меня приведённый там код вызвал некоторые сомнения, поэтому я и задал вопрос - может быть, у людей есть другие решения

> sniknik ©   (20.01.05 17:33) [5] , Vlad ©   (20.01.05 19:05) [17] Спасибо, очень интересная статья!

Резюме: придётся реализовывать RefreshRecord.


 
Tormoz   (2005-01-21 11:45) [21]

To Vlad ©

С П А С И Б О !


 
Tormoz   (2005-01-21 12:15) [22]

To Vlad

Вот такой вопрос возник.
Запускаю прогу на выполнение. В Grid"e вижу строки различной высоты: все Ок.
Жму клавишу стрелка вниз.
Когда индикатор должен уйти на запись ниже последней видимой в Grid"e, он "теряется".
В общем, скроллинг прихрамывает. Я так понимаю, причина в раличной высоте строк, отображенных в окне Grid"a.

Есть мысли, как правильно обработать эту шероховатость?


 
Vlad ©   (2005-01-21 12:34) [23]


> Tormoz   (21.01.05 12:15) [22]


> Когда индикатор должен уйти на запись ниже последней видимой
> в Grid"e, он "теряется".

Индикатор теряется?
Хм... странно, у меня все нормально, ничего не теряется.
Приведи свой код OnDrawColumnCell


 
Tormoz   (2005-01-21 16:44) [24]

To Vlad

Type
 TMyDBGrid = class(TCustomDBGrid)
 public
  property DataLink;
 end;

...

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var
Ar :integer;
begin

with TMyDBGrid(Sender) do
begin
   Ar := DataLink.ActiveRecord;

   if Table1HType.Value = 0
   then RowHeights[Ar + 1]:=30
   else RowHeights[Ar + 1]:=DefaultRowHeight;

   DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

end;



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

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

Наверх




Память: 0.52 MB
Время: 0.049 c
4-1102446667
z_man
2004-12-07 22:11
2005.02.20
Как спрятать запущенную программу?


1-1093323585
Vilux
2004-08-24 08:59
2005.02.20
TTree и цвет текста


14-1106821364
BiN
2005-01-27 13:22
2005.02.20
Фантастический роман или повесть. Может кто помнит?


14-1107225865
X9
2005-02-01 05:44
2005.02.20
mail.com


1-1107424602
dreamse
2005-02-03 12:56
2005.02.20
Как определить какие строки выделены в DbGrid