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

Вниз

Как можно узнать, какие строки показываются в DBGRID   Найти похожие ветки 

 
Rax   (2008-03-06 16:57) [0]

Т.е. rowid тех записей, которые реально отображаются в данный момент.


 
Правильный_Вася   (2008-03-06 17:05) [1]

а запросить rowid  в селекте слабо?
а если запрос - соединение нескольких таблиц или вообще результат работы ХП, которая нагенерила результат из воздуха, а не из таблиц?


 
Rax   (2008-03-06 17:14) [2]

2Правильный_Вася:
вопрос правильно понять слабо?
мне нужен Recno ТОЛЬКО ТЕХ ЗАПИСЕЙ, КОТОРЫЕ В ДАННЫЙ МОМЕНТ ВИДНЫ В ГРИДЕ. Ферштейн?
объясняю на пальцах:
у меня есть выборка
1
2
3
4
5
6
это записи в Dataset, 6 штук
Но в гриде видны только со 2 по 5:
2
3
4
5
т.е. в первой строке грида отображается запись №2, в последней - №5.
Вот мне нужно получить это соответствие
1 строка грида = 2 запись в датасет
2 строка грида = 3 запись в датасет
3 строка грида = 4 запись в датасет
4 строка грида = 5 запись в датасет
так понятнее?


 
Johnmen ©   (2008-03-06 17:31) [3]

Можно поинтересоваться, какой в этом сакральный смысл?


 
Rax   (2008-03-06 17:39) [4]

Подстраивать высоту строки под данные


 
Правильный_Вася   (2008-03-06 17:40) [5]


>  rowid тех записей
> мне нужен Recno

ты бы уж определился, это понятия разных категорий

> Ферштейн?объясняю на пальцах:

еще раз - набор данных, показываемый в гриде, НЕ ОБЯЗАН состоять из записей одной таблицы


 
sniknik ©   (2008-03-06 17:41) [6]

тебе нужен DataLink, в гриде, это фактически "снепшот" данных датасета. т.е. все что в нем с 1 позиции по последнюю то и отображается.

а зачем, это действительно интересно...


 
sniknik ©   (2008-03-06 17:43) [7]

> Подстраивать высоту строки под данные
а вот этого у тебя не выйдет... т.к. твои "подстройки" на количество записей в DataLink мало влияют... это ты в принципе сам должен расчитывать и устанавливать тогда.


 
Правильный_Вася   (2008-03-06 17:44) [8]


> вопрос правильно понять слабо?

я телепатор в ремонт сдал, уж больно часто глупые вопросы попадаются, у него катушки перегреваются


 
Rax   (2008-03-06 17:57) [9]

2Правильный_Вася:

> ты бы уж определился, это понятия разных категорий

Виноват, ввёл в заблуждение.
Мне нужен recno датасета. Соотв что там в запросе понаписано - по барабану.

2sniknik:
Про "все что в нем с 1 позиции по последнюю то и отображается" - глупость полная. Грид отображает то, что в нём помещается. Если в датасете 500 записей - будут показываться далеко не все. Там справа полоса прокрутки если кто не в курсе.
Теперь представь: есть 500 записей в датасете. Я прокрутил грид до середины. У меня в первой записи грида отображается 250-я запись из датасета. Так?


> а вот этого у тебя не выйдет... т.к. твои "подстройки" на
> количество записей в DataLink мало влияют... это ты в принципе
> сам должен расчитывать и устанавливать тогда.

Очень даже выйдет!
Смотри: я знаю, что в 1 строке грида у меня 5 запись датасета. Я смотрю данные в 5 записи датасет, и вижу что мне нужно отображать эти данные в 2 строках. Я делаю 1 строку грида =2 строкам, и всё!


 
sniknik ©   (2008-03-06 18:04) [10]

2sniknik:
> Про "все что в нем с 1 позиции по последнюю то и отображается" - глупость полная.
это не глупость это непонимание того что читаеш...
> т.е. все что в нем с 1 позиции по последнюю то и отображается.
пусть в датасете будет 500 записей, в даталинке будет только 18 (+-) отображаемых.

т.е. это полный ответ на твой вопрос. пусть по глупости (сам написал) и не воспринимаемый...


 
sniknik ©   (2008-03-06 18:06) [11]

> Я делаю 1 строку грида =2 строкам, и всё!
если в даталинке останется 5 то ты попросту "сломаешь" нормальную работу/отображение грида. а количество там по моему (не помню) ридонли проперти.


 
Rax   (2008-03-06 18:12) [12]


> пусть в датасете будет 500 записей, в даталинке будет только
> 18 (+-) отображаемых.

Точняк! То, что надо! Спасибо огромное!


 
Rax   (2008-03-06 18:37) [13]


> если в даталинке останется 5 то ты попросту "сломаешь" нормальную
> работу/отображение грида. а количество там по моему (не
> помню) ридонли проперти.

Конечно я ничего в даталинке трогать не собираюсь!
Я делаю примерно так:
  for c:=0 to grid.DataLink.DataSet.RecordCount-1 do begin
     if length(grid.DataLink.DataSet.FieldByName("field").AsString)>100 then      
       grid.RowHeights[c]:=grid.RowHeight*5;
   end;


 
Johnmen ©   (2008-03-06 19:41) [14]


> Если в датасете 500 записей - будут показываться далеко не все.

и

> for c:=0 to grid.DataLink.DataSet.RecordCount-1 ...
> grid.RowHeights[c]:=...

Мдя...
Рано вам ещё, барин (с)


 
sniknik ©   (2008-03-06 19:48) [15]

> Конечно я ничего в даталинке трогать не собираюсь!
вот про то и говорю. и зря не собираешься...
раз уж желаешь изменить частично стиль отрисовки должен настроить и то от чего зависит другая, невменяемая тобой часть... иначе будут перекосы.
а вот что и как менять, звиняйте не знаю, не "надобилось" ничего подобного, а лезть просто так разбираться лень.

> Я делаю примерно так:
>   for c:=0 to grid.DataLink.DataSet.RecordCount-1 do begin
и пробегаешься по реально всему датасету... тк. DataSet в даталинке это ссылка на него... (выйдет количество записей за размер грида по строкам, будет глюк)
и потом, изменение высоты в зависимости от "ширины" строки оно както странновато, не находишь? опять таки интересен смысл действа...


 
Rax   (2008-03-06 20:14) [16]


> и пробегаешься по реально всему датасету... тк. DataSet
> в даталинке это ссылка на него... (выйдет количество записей
> за размер грида по строкам, будет глюк)

неверно. если грид ужат до 5 строк - grid.DataLink.DataSet.RecordCount возвращает именно эти 5 строк.


> и потом, изменение высоты в зависимости от "ширины" строки
> оно както странновато, не находишь? опять таки интересен
> смысл действа...

Конечно же я упрощаю! Не от ширины, а от количества переносов строки внутри текста. При выводе на экран делается wordwrap.
В итоге получается вот так: http://ipicture.ru/uploads/080306/7U6RPM1cUG.gif


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

Какие перекосы? Что там настраивать? Зачем? )


 
Rax   (2008-03-06 20:15) [17]


> > Если в датасете 500 записей - будут показываться далеко
> не все.
>
> и
>
> > for c:=0 to grid.DataLink.DataSet.RecordCount-1 ...
> > grid.RowHeights[c]:=...
>
> Мдя...
> Рано вам ещё, барин (с)

Мне в самый раз, не переживай.
Для тех, кто в танке - это не рабочий код, это просто от руки накиданный пример использования.


 
sniknik ©   (2008-03-06 20:27) [18]

> Какие перекосы?
не знаю... но чтото будет обязательно.

> Что там настраивать?
опять таки не знаю, т.к. не занимался конкретно этим. писал уже.

> Зачем? )
а вот зачем знаю. догадываюсь... например при  
> В итоге получается вот так: http://ipicture.ru/uploads/080306/7U6RPM1cUG.gif
в даталинке будет 18 или 19 записей, одной ты занял место 3х, 2 "спрятались" за нижним краем, и что будет если попробовать "проскролировать", мышью или клавишами записи вниз, т.е. подогнать выделение на нижнюю, видимую у тебя сейчас запись и еще вниз? на 2, 3 раза... чтото не так будет (опять таки неохота проверять что), вот для того чтобы от этого избавиться.
может конечно тебе повезло, и дядя Борланд подобное надругательство над гридом предусмотрел. но... сомневаюсь...


 
Rax   (2008-03-06 20:34) [19]


> если грид ужат до 5 строк - grid.DataLink.DataSet.RecordCount
> возвращает именно эти 5 строк.

Сорри, это я прогнал похоже. grid.DataLink.RecordCount выдаёт 5 строк, а grid.DataLink.DataSet.RecordCount выдаёт все. Блин (
причём datalink RecordCount выдаёт правильный. А вот список этих строк через него не получить.
Значит начинаем ab initio.
Вопрос:

Как получить соответствие recno датасета<>rownum грида?


 
sniknik ©   (2008-03-06 21:17) [20]

> А вот список этих строк через него не получить.
да ну? а ты его методы изучил?

recno ты не получишь, его нет, а вот отображаемые на грид записи запросто. (просто не надо думать в стиле stringgrid-а... что там будет чтото подобное cells[1, 1]...)


 
Rax   (2008-03-06 21:27) [21]


> да ну? а ты его методы изучил?

в паблике:
   constructor Create(AGrid: TCustomDBGridEh);
   destructor Destroy; override;
   function AddMapping(const FieldName: string): Boolean;
   procedure ClearMapping;
   procedure Modified;
   procedure Reset;
   property DefaultFields: Boolean read GetDefaultFields;
   property FieldCount: Integer read FFieldCount;
   property Fields[I: Integer]: TField read GetFields;
   property SparseMap: Boolean read FSparseMap write FSparseMap;

единственное что подходит - Fields, но он какой-то странный, если честно...


> recno ты не получишь, его нет, а вот отображаемые на грид
> записи запросто

подскажи плз как, если не трудно. у меня к вечеру башка уже не варит не фига (


 
Ega23 ©   (2008-03-06 22:59) [22]

См. TDataLink.BufferCount, ActiveRecord


 
sniknik ©   (2008-03-06 23:22) [23]

> в паблике:
а в паблике предка? ...

> единственное что подходит - Fields, но он какой-то странный, если честно...
чего же в нем странного? это и есть текущая(активная) запись, все поля в порядке в каком они в гриде в "шапке" отображаются. хотя, если порядок не нужен можно и через DataSet из непосредственно датасета их выбрать.
в момент например отрисовки записи (событии) активная запись уже установлена, в другой момент (хз. какой. ты так ничего и показал конкретного, где и что делаешь. а перечислять все возможное лень...) ее надо сохранять и восстанавливать после работы (иначе данные в гриде "поплывут", будут не на своих местах).

> подскажи плз как, если не трудно.
что именно? как из поля значение достается? это ты должен и так, и + уметь работать с "генофондом" тоже, раз уж взялся компоненты переделывать.


 
Rax   (2008-03-07 00:26) [24]


> См. TDataLink.BufferCount, ActiveRecord

Точно! Спасибо большое, всё работает )


 
Rax   (2008-03-07 00:53) [25]


> чего же в нем странного? это и есть текущая(активная) запись,
>  все поля в порядке в каком они в гриде в "шапке" отображаются.
>  хотя, если порядок не нужен можно и через DataSet из непосредственно
> датасета их выбрать.

Странно то, что возвращается тип TField, вместо TFieldList или TFieldS.
Но это не важно.


> в момент например отрисовки записи (событии) активная запись
> уже установлена, в другой момент (хз. какой. ты так ничего
> и показал конкретного, где и что делаешь. а перечислять
> все возможное лень...) ее надо сохранять и восстанавливать
> после работы (иначе данные в гриде "поплывут", будут не
> на своих местах).

Сейчас делаю так:
в OnGetCellParams
   if Length(dataset.FieldByName("field").AsString)>50 then //Чисто для проверки
     grid.RowHeights[grid.DataLink.ActiveRecord]:=Canvas.TextHeight("Щ")*4;

работает замечательно.
НО
не работает скролл ((
в том плане, что при большом кол-ве записей курсор уезжает вниз, но на экране всё равно остаются первые записи ((
Я так понимаю, это из-за того, что процедура скролла оперирует тупо RowHeight, а не считает RowHeightS ((
Завтра буду дальше разбираться. Большое спасибо за помощь!


 
sniknik ©   (2008-03-07 08:44) [26]

> Странно то, что возвращается тип TField,
не тип TField, а массив из них... вместо
> вместо TFieldList или TFieldS.
тип список? а как ты им будеш обеспечивать порядок записей? какими усилиями, вместо простой перестановки в массиве (при перетаскивании заголовка на другое место)

> Но это не важно.
конечно не важно.
ты почемуто решил, заранее, еще ничего не зная про изучаемый компонент, как он должен быть устроен... потом удивляешься, что реальность не совпадает с твоими "мечтами", вместо того чтобы думать - "а почему сделано так, а не иначе. зачем так делалось"...
ты с таким стилем мышления вместо того чтобы учится программировать, учишься все обхаивать (ведь ты заранее знаеш как "правильно", даже не зная что делается). не быть тебе так программистом... но это совершенно не важно. тут ты прав.

мальчиком больше, мальчиком меньше. ерунда. дело житейское. © Карлсон который живет на крыше.

> работает замечательно.
> НО
> не работает скролл ((
тебя предупреждали ([18]), это и есть "чтото не так"... а вовсе не "работает замечательно".

> что процедура скролла оперирует тупо RowHeight
"тупо" оперировать она не может, она делает по логике какую заложил программист это писавший.

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


 
Johnmen ©   (2008-03-07 09:08) [27]


> Мне в самый раз, не переживай.

Как мы увидели далее, переживать действительно не стОит :)))


 
Rax   (2008-03-07 10:01) [28]

О боже, только я порадовался что тут вменяемый человек появился...
итак, по пунктам:

> ты с таким стилем мышления вместо того чтобы учится программировать,
>  учишься все обхаивать (ведь ты заранее знаеш как "правильно",
>  даже не зная что делается). не быть тебе так программистом.
> .. но это совершенно не важно. тут ты прав.

мальчик, я уже много лет программирую
поэтому и могу решить, что важно а что нет.
и я ничего не обхаиваю, не надо придираться к словам.


> тебя предупреждали ([18]), это и есть "чтото не так"...
> а вовсе не "работает замечательно".

и что? в целом цель достигнута. мелкие недочёты я сегодня исправлю. в чём проблема-то?


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

про "тупо" - я просто навскидку предположил возможную причину.
а насчёт "просто на всякий случай" - рекомендую поизучать VCL в целом, очень интересно, и многое станет понятнее.


 
Rax   (2008-03-07 10:05) [29]

Удалено модератором


 
ЮЮ ©   (2008-03-07 10:08) [30]

Удалено модератором


 
Johnmen ©   (2008-03-07 10:14) [31]

Удалено модератором


 
ЮЮ ©   (2008-03-07 10:23) [32]

не работает скролл ((
в том плане, что при большом кол-ве записей курсор уезжает вниз, но на экране всё равно остаются первые записи ((
Я так понимаю, это из-за того, что процедура скролла оперирует тупо RowHeight, а не считает RowHeightS ((
Завтра буду дальше разбираться. Большое спасибо за помощь!


Я лет 10 назад наследовался от TDBGridEh, в которм функциональность TDBGrid "повыше", наследуется все-таки от TCustomGrid, где поведение не отличалось от ожидаемого. Рекомендую посмотреть (или взять за базу) его или TRxDbGrid, чтобы прочувствовать поведение TDBGrid.


Я так понимаю, это из-за того, что процедура скролла оперирует тупо RowHeight, а не считает RowHeightS ((
Завтра буду дальше разбираться. Большое спасибо за помощь!

Отладчик поволит увидеть реальные процессы, а не фантазировать. :)


 
Игорь Шевченко ©   (2008-03-07 10:45) [33]

От DBGrid замучаешься писать наследника, лучше от TCustomGrid - дольше, зато надежнее. И высоту строк надо вычислять не для "видимых", а для всех, грид сам разберется, что ему показывать.


 
Rax   (2008-03-07 10:54) [34]


> Я лет 10 назад наследовался от TDBGridEh, в которм функциональность
> TDBGrid "повыше", наследуется все-таки от TCustomGrid, где
> поведение не отличалось от ожидаемого. Рекомендую посмотреть
> (или взять за базу) его или TRxDbGrid, чтобы прочувствовать
> поведение TDBGrid.

А я и работаю с TDBGridEh )))


> Отладчик поволит увидеть реальные процессы, а не фантазировать.
>  :)

Ну конечно )
Это было просто предположение. спать очень хотелось уже )


> От DBGrid замучаешься писать наследника, лучше от TCustomGrid
> - дольше, зато надежнее. И высоту строк надо вычислять не
> для "видимых", а для всех, грид сам разберется, что ему
> показывать.

При наличии времени - несомненно. Но у меня, к сожалению, цейтнот ((


 
sniknik ©   (2008-03-07 11:13) [35]

> О боже, только я порадовался что тут вменяемый человек появился...
если это обо мне, то я каким был таким и остался, а "вменяемость" у меня сильно зависит от собеседника.

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

> про "тупо" - я просто навскидку предположил возможную причину.
после того как тебе причину попросту открытым текстом сказали...? и которую ты проигнорировал. ладно бы был несогласен, оспорил, привел свои доводы, сказал почему думаешь что это не так и т.д. (в общем вел бы себя адекватно по моим меркам) но проигнорировал... (вот тут моя вменяемость к тебе и кончилась. т.к. очевидно стало с кем общаюсь)

> а насчёт "просто на всякий случай" - рекомендую поизучать VCL в целом, очень интересно, и многое станет понятнее.
ну так следуй своим же советам! чего же вместо этого ты спрашиваешь как изменить чтото у тех кто по твоему не знает как это меняемое устроено?

> а не считает RowHeightS ((
а вообще что бы ему это дало? ну посчитал бы он по нему 15 видимых, правильно... а куда деть суммы еще трех выделенных (что не исправлено) которые до 18ти?
ладно, в позднем проигнорировали значение, специально выведенное для указания отображаемого количества - не рисуем... а другие места где это значение возможно используется? вместо визуальной получишь вообще непонятную какую ошибку, непонятно когда.

> А я и работаю с TDBGridEh )))
а вот это надо указывать изначально, методы "ремонта" жигулей отличаются о ремонта запорожца... везде свои "тонкости". ("многолетний опыт программирования" тебе еще не подсказал эту простую "житейскую мудрость"?)
кстати по моим критериям это замалчивание = вранью, умышленному введению отвечающих в заблуждение. (т.е. еще на ступеньку "вменяемости" вниз)


 
ANB   (2008-03-07 17:26) [36]


> Rax   (07.03.08 10:54) [34]

Грид придется практически с нуля писать, чтобы работала эта фича.
Кстати, у эхлиба юзер может сам изменять высоту строки. Вполне на это можно зашится и ничего не делать.

ЗЫ. Я видел реализованный грид (самопал в ICL) с фичой автоподгона высоты строки под данные. И видел крутые эффекты, когда в узкую колонку попадает большой текст и тогда строка в экран не лезет.
Модуль с этим гридом был сильно не маленький и писали они его (с отладкой) почти год.

Удачи :)



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

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

Наверх




Память: 0.57 MB
Время: 0.005 c
2-1216942391
Ruzzz
2008-07-25 03:33
2008.09.07
Доступ к данным с разных потоков


2-1215903057
ply
2008-07-13 02:50
2008.09.07
увеличение времени исполнения запросов к БД


15-1216034230
oldman
2008-07-14 15:17
2008.09.07
Как в ХР увидеть содержимое корневого каталога С?


1-1198227129
Afonya
2007-12-21 11:52
2008.09.07
FastScript доступ к объектам дочерних окон.


3-1205271880
GanibalLector
2008-03-12 00:44
2008.09.07
backup/restore Firebird





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