Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо