Текущий архив: 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.041 c