![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TopRow в DBGrid [D6]
EthernalWonderer © (2005-01-20 16:52:00)А не подскажут ли уважаемые Мастера, можно ли прочитать и установить значение TopRow в DBGrid аналогично StringGrid'у?
Tormoz (2005-01-21 16:44:00) [1]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;
Vlad (2005-01-21 12:34:00) [2]
> Tormoz (21.01.05 12:15) [22]
> Когда индикатор должен уйти на запись ниже последней видимой
> в Grid'e, он "теряется".
Индикатор теряется?
Хм... странно, у меня все нормально, ничего не теряется.
Приведи свой код OnDrawColumnCell
Tormoz (2005-01-21 12:15:00) [3]To Vlad
Вот такой вопрос возник.
Запускаю прогу на выполнение. В Grid'e вижу строки различной высоты: все Ок.
Жму клавишу стрелка вниз.
Когда индикатор должен уйти на запись ниже последней видимой в Grid'e, он "теряется".
В общем, скроллинг прихрамывает. Я так понимаю, причина в раличной высоте строк, отображенных в окне Grid'a.
Есть мысли, как правильно обработать эту шероховатость?
Tormoz (2005-01-21 11:45:00) [4]To Vlad ©
С П А С И Б О !
EthernalWonderer (2005-01-21 09:49:00) [5]> Alex_S (20.01.05 19:12) [16]
Спасибо за ссылку, я уже читал эту ветку до того,как задать вопрос. Откровенно говоря, у меня приведённый там код вызвал некоторые сомнения, поэтому я и задал вопрос - может быть, у людей есть другие решения
> sniknik © (20.01.05 17:33) [5] , Vlad © (20.01.05 19:05) [17] Спасибо, очень интересная статья!
Резюме: придётся реализовывать RefreshRecord.
Alex_S (2005-01-20 19:15:00) [6]А надо или нет, ему решать. Тебе не нравится, а нам пойдет. Но то, что он затеял - искать TopRow - не выйдет, уже пройденный этап. Лучше 2 набора. А то, что у меня - уже в исключительном случае. И то бояться его не найдо, если с умом всё делать.
Alex_S (2005-01-20 19:12:00) [7]Лень искать, а текст у меня отдельно хранится. Так что не надо меня совсем ламером считать :-(.
Просто храню хорошие решения в определенной папке.
Но теперь и ссылку запишу, однако
Vlad (2005-01-20 19:05:00) [8]
> Alex_S (20.01.05 19:02) [16]
а ссылку привести слабо, вот так например ? :-)
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1104861881&n=1
И еще, то что там написано (ИМХО) образец того как не надоделать.
Alex_S (2005-01-20 19:02:00) [9]>Хочется делать это незаметно от пользователя, а для этого восстанавливать положение курсора и строк таблицы после перезапроса.
--------
Об одном и том же. Второй раз за день, третий - за 2 недели.
Первым в этом году был я, и этот вопрос у меня решен.
Найди меня и внимательно до конца прочитай ветку.
<<
Восстановление строк DBGrid после перезагрузки таблицы TQuery. [D7, Paradox]
Alex_S (04.01.05 21:04)
>>
Но лучше всего и проще, если есть возможность бегать по таблице в другом DataSete, то так и надо делать, а потом вовращаться к DBGrid. А вот если действительно надо перезагружать измененные строки и оставаться на месте, то это - то самое...
Vlad (2005-01-20 18:52:00) [10]
> Johnmen © (20.01.05 18:44) [14]
Эх, выкрутился ;-)
Johnmen (2005-01-20 18:44:00) [11]Итак, смотрим вопрос
>возможно установить различную высоту строк данных для DBGrid'a ?
видим два ответа, первый
Нет
второй
TMyDBGrid=class(TDBGrid);
...
замечаем, что появился некий TMyDBGrid.
А в вопросе ничего не было про использование вспомогательных классов.
Вот такое имхо :)
Vlad (2005-01-20 18:38:00) [12]
> 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;
Vlad (2005-01-20 18:26:00) [13]
> Tormoz (20.01.05 18:18) [11]
> А дальше Ты, наверное, уже знаешь
Угу, знаю. Индекс строки грида вычислять надо, тогда будет все пучком :-)
Tormoz (2005-01-20 18:18:00) [14]To Vlad © (20.01.05 18:11) [10]
Да брось Ты!
Я тоже радовался , когда написал:
if MyCondition Then
TStringGrid(MyDBGrid).RowHeights[<индекс строки>]:= <значение>;
И все было прекрасно, пока не начался скроллинг вниз. А дальше Ты, наверное, уже знаешь... :-)
Vlad (2005-01-20 18:11:00) [15]
> 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:09:00) [16]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:06:00) [17]
> Tormoz (20.01.05 17:57) [6]
В статье приведенной sniknik © это есть.
TMyDBGrid=class(TDBGrid);
В событии OnDrawColumnCell пишем
TMyDBGrid(Sender).RowHeights[<индекс строки>]:= <значение>;
Johnmen (2005-01-20 18:06:00) [18]Нет.
Tormoz (2005-01-20 17:57:00) [19]А вот может кто-нибудь знает,
возможно установить различную высоту строк данных для DBGrid'a ?
sniknik (2005-01-20 17:33:00) [20]http://www.delphikingdom.com/asp/viewitem.asp?catalogid=806