![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TDBGridEh [D7, MSSQL]
bon © (2004-07-15 13:45:00)Доброго дня!
Уменя есть результат запроса
field1 field2 field3
100 5,7 3,2
100 4,5 7,2
100 5,9 1,7
Как отобразить в Гриде
field1 field2 field3
100 5,7 3,2
- 4,5 7,2
- 5,9 1,7
т.е. в столбце field1 не показывать повторения ???
Sandman25 (2004-07-22 16:28:00) [1][16] Johnmen © (22.07.04 16:24)
"а зачем? Есть же форум..." (c) Соловьев
Johnmen (2004-07-22 16:24:00) [2]>Какие будут ещё идеи?
А у тебя за неделю так ни одна и не появилась ?!
:)
Соловьев (2004-07-22 16:13:00) [3]ИМХО, нарушается 1-я нормальная форма. Я бы сделал действительно с TreeView, или 2 грида - мастер и детайл
Sandman25 (2004-07-22 16:11:00) [4]Перекачать данные в ClientDataSet с аналогичной структурой + еще поле.
bon (2004-07-22 16:09:00) [5]Какие будут ещё идеи?
TohaNik (2004-07-15 17:51:00) [6]Класс
Johnmen (2004-07-15 17:15:00) [7]:)
Sandman25 (2004-07-15 17:14:00) [8]Ну, в общем смысле, да. Меня запутало, что мы можем пальцем по листу водить в любом направлении, даже по диагонали :)
Johnmen (2004-07-15 17:09:00) [9]>Sandman25 © (15.07.04 17:04) [8]
Потому, что на бумаге мы видим результат односторонней навигации...
Sandman25 (2004-07-15 17:04:00) [10][7] Johnmen © (15.07.04 16:52)
Почему двусторонняя навигация является препятствием? При отображении на бумаге именно так и делают часто.
Возможно, автору лучше использовать какой-нибудь DBTreeView, тогда данные можно будет группировать по Field1.
Johnmen (2004-07-15 16:52:00) [11]>Sandman25 ©
Всё из-за того, что желаемое автором поведение идеологически неверно для НД, в которых предполагается двусторонняя навигация. И безусловно из-за Sandman25 © (15.07.04 16:31) [5]
:)
Sandman25 (2004-07-15 16:34:00) [12]или вообще
select *,
case
when rownum = (select min(rownum) from a b where b.field1=a.field1)
then cast(field1 as char(10))
else
cast('---' as char(10))
end calcfield1
from
(select field1, field2, field3
from t
order by field1
) a
Sandman25 (2004-07-15 16:31:00) [13]А все из-за того, что с точки зрения реляционных СУБД порядок записей не важен.
select field1, field2, field3,
case
when rowid = (select min(rowid) from t where field1=a.field1)
then cast(field1 as char(10))
else
cast('---' as char(10))
end calcfield1
from t a
order by field1, rowid
Sandman25 (2004-07-15 16:09:00) [14][3] Johnmen © (15.07.04 15:34)
Да, нехорошо получается :(
Johnmen (2004-07-15 15:34:00) [15]Хм...
А теперь попробуй походить в гриде вниз и особенно наверх...
:)))
bon (2004-07-15 15:17:00) [16]Sandman25 © (15.07.04 14:44) [1]
Сенк"с за совет, помогло!!!
Sandman25 (2004-07-15 14:44:00) [17]Можно сделать через вычислимое поле.
В OnCalcField пишем:
var
FieldAsInteger: Integer;
begin
Field1AsInteger := Field1.AsInteger;
if Field1AsInteger = PreviousFieldAsInteger{модульная переменная} then
CalcField1.AsString := '-'
else
begin
PreviousFieldAsInteger := Field1AsInteger;
CalcField1.AsInteger := Field1AsInteger;
edn;
end