![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TopRow в DBGrid
PZ © (2006-11-08 18:44:00)Здравствуйте.
У меня простейшая база данных из одной таблицы, объемом порядка 2500 записей. Набор данных создается компонентом TClientDataSet и отображается компонентом DBRxGrid.
Мне хотелось бы, чтобы некая запись моей базы по заданному условию отображалась в верхней строчке DBRxGrid (какбы аналог свойства StringGrid.TopRow). Прошу дать практический совет, как реализовать эту задачу, желательно с примером. (Delphi 7)
С уважением, PZ
ЮЮ (2006-11-09 10:28:00) [21]
> Как бы теперь практически реализовать Ваше предложение?
По тексту в [11] код. С проблемами вернуться сюда.
Кстати, текущая запись НД отличается от той, что должна быть первой в гриде?
PZ (2006-11-09 10:24:00) [22]> [11] ЮЮ © (09.11.06 03:36)
> Насколько я понял, человек просто хочет спозиционировать датасет в гриде так, чтобы определенная запись оказалось первой в этом гриде.
Вы действительно правильно поняли меня. Как бы теперь практически реализовать Ваше предложение? Может быть покажите на примере?
С уважением PZ
ЮЮ (2006-11-09 03:36:00) [23]Насколько я понял, человек просто хочет спозиционировать датасет в гриде так, чтобы определенная запись оказалось первой в этом гриде.
А текущая какая? В DBgrid-e её присутствие на экране обязательно.
Поэтому, сделав её текущей, она обязательно попадет в Грид. Но, скорей всего, в его середину.
Теперь, обратившись к DBGrid.DataLink (protected), можно узнать на какой строке находится эта запись, и какая запись последняя. Теперь надо сделать текущнй последнюю, сделать MoveBy, вызвав скроллинг НД в гриде, и опять сделать текущей нашу запись, которая будет к этому времени верхней в гриде.
V-A-V (2006-11-08 22:32:00) [24]> Ввести поле "ONTOP" boolean, присваивать нужной записи значение True и новый select, но это извращение.
ну почему-же если нельзя и очень хочется, то можно...
создаем поле "isOnTop" и для нухной записи в нухный момент присваеваем ему True, а остальным записям False
> Нет, немного не так. У меня база отсортирована по алфавиту. Нарушать порядок не желательно.
ну и естественно должен быть соответствующий индекс типа "isOnTop;Name"
evvcom (2006-11-08 19:46:00) [25]> [8] PZ (08.11.06 19:41)
> Чувствую, что не совсем то, что мне надо
Так ты объяснить толком не можешь, чего же тебе надо!
PZ (2006-11-08 19:41:00) [26]Чувствую, что не совсем то, что мне надо. Видимо простого решения не существует. Тем не менее спасибо всем за участие.
evvcom (2006-11-08 19:39:00) [27]> [6] rar © (08.11.06 19:37)
зачем 2 запроса, если можно одним?
rar (2006-11-08 19:37:00) [28]может создать два запроса и объединить их по Union
evvcom (2006-11-08 19:31:00) [29]select
*,
case when <моя строка> then 0 else 1 end as ord
from ...
order by ord, fam
PZ (2006-11-08 19:22:00) [30]Нет, немного не так. У меня база отсортирована по алфавиту. Нарушать порядок не желательно. Надо только чтобы заданная строка оказалась в верхней строке. А те, что ниже - остались внизу, те, что выше - остались вверху. После чего мышкой можно было бы сдвигать все строки вверх-вниз без нарушения порядка. То есть, именно, как в SringGrid делается.
Desdechado (2006-11-08 19:05:00) [31]отсортируй по этому условию
PZ (2006-11-08 19:01:00) [32]А как без извращения? Возможно ли сделать?
Jeer (2006-11-08 18:48:00) [33]Ввести поле "ONTOP" boolean, присваивать нужной записи значение True и новый select, но это извращение.