-
Привет мастерам! У меня такая проблема не получается без вашего мещательства. Я получаю данные из базы и показываю в гриде (DBGridEh). В гриде есть 3 столбца 1) номер, 2) ФИО, 3) суммы транзакции. Так нужно было сделать так чтобы при показе в гриде после первого показа ФИО если будет похоже то их не показат а только сумму транзакции. Таблица по фамили фильтрован. Пример. 1. Иванов И.И. 20000,05 2. Иванов И.И. 25300,10 3. Сидров С.С. 45000,00 4. Сидров С.С. 50000,50 5. Сидров С.С. 15000,30 Должно показать 1. Иванов И.И. 20000,05 2. 25300,10 3. Сидров С.С. 45000,00 4. 50000,50 5. 15000,30
Я такой код написал для грида procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumnEh; State: TGridDrawState); begin if (Column.FieldName='client_fio') then begin if Column.Field.Dataset.FieldbyName('client_fio').AsString = ss then begin DBGridEh1.Canvas.TextOut(Rect.Right-2-(Length(ss)),Rect.Top+2,' '); end else begin ss:=Column.Field.Dataset.FieldbyName('client_fio').AsString; end; end;
но наверно сделал ощибку где то, не получился. Помогите, что нужно исправить. end;
-
Боюсь соврать, но вроде в ЕхГриде была такая фича, выставлялась какими то пропертями. Под рукой нет - не вспомню.
ИМХО - это достаточно вредная штука, ибо может быть это и не тот же самый Иванов И.И. Мало ли в Бразилии Донов Педров. (с) Дона Роза Д'альвадорес
-
if (Column.FieldName='client_fio') then begin if Column.Field.Dataset.FieldbyName('client_fio').AsString = ss then
Это пестня.
-
> Xmen (11.04.2008 13:54:00) [0]
Это можно сделать или с зеркальным массивом, индекс+признак, или переход на StringGrid Это ты еще не тестировал.
-
> Anatoly Podgoretsky © (11.04.08 14:12) [3] > > Xmen (11.04.2008 13:54:00) [0]Это можно сделать или > с зеркальным массивом, индекс+признак, или переход на StringGridЭто > ты еще не тестировал.
Незнаю очем вы говорите, наверно непонял
-
> Xmen (11.04.2008 14:34:04) [4]
Там много слов, какие ты не понял, иностранное только одно, но с ним совсем просто, просто добавь букву Т в начале и нажми F1
-
> Sergey13 © (11.04.08 14:04) [1] > > Боюсь соврать, но вроде в ЕхГриде была такая фича, выставлялась > какими то пропертями. Под рукой нет - не вспомню.
Умеет факт.
-
В дизайнере колонок(или ран-тайме, как нравиться) для колонки ФИО(из примера автора) HideDuplicates:=True
-
Спасибо за советы, у меня кое что получился.
if (Column.FieldName='client_fio') then begin if Column.Field.Dataset.FieldbyName('client_fio').AsString = ss then begin DBGridEh1.Canvas.TextOut(Rect.Left-50,Rect.Top+2,' '); DBGridEh1.Canvas.TextOut(Rect.Left,Rect.Top+2,' '); end else begin ss:=Column.Field.Dataset.FieldbyName('client_fio').AsString; end; end;
-
> Виталий Панасенко(дом) (11.04.08 15:58) [7] > В дизайнере колонок(или ран-тайме, как нравиться) для колонки > ФИО(из примера автора) HideDuplicates:=True
Спасибо получился. И еще вопрос в этом гриде есть еще поле код банка клиента а как сним быть? я ране это не писал изза того что можно было если найти выход с фио то с кодом тоже можно было бы но загвоздка в том что у клиентов код банка встречается в рахных местах одинаковые. Пример. 1. 8001 Иванов И.И. 20000,05 2. 8001 Иванов И.И. 25300,10 3. 8002 Сидров С.С. 45000,00 4. 8002 Сидров С.С. 50000,50 5. 8002 Сидров С.С. 15000,30 6. 8001 Аликсеев А.А. 45000,00 7. 8001 Аликсеев А.А. 50000,50 8. 8002 Николаев Н.Н. 15000,30 Должно показать 1. 8002 Иванов И.И. 20000,05 2. 25300,10 3. 8002 Сидров С.С. 45000,00 4. 50000,50 5. 15000,30 6. 8001 Аликсеев А.А. 45000,00 7. Аликсеев А.А. 50000,50 8. 8002 Николаев Н.Н. 15000,30 Если сделаю по вашему совету то будет так 1. 8002 Иванов И.И. 20000,05 2. 25300,10 3. 8002 Сидров С.С. 45000,00 4. 50000,50 5. 15000,30 6. Аликсеев А.А. 45000,00 7. Аликсеев А.А. 50000,50 8. Николаев Н.Н. 15000,30 Как мне быть?
-
if Column.Field.Dataset.FieldbyName('client_fio').AsString = ss then
то же самое что и
if Column.Field.AsString = ss then
с учетом предыдущего ифа
-
with C as
(
select 1 id, 'A' Client, 12 Sum_Pay from dual
union all
select 2 id, 'A' Client, 13 Sum_Pay from dual
union all
select 3 id, 'A' Client, 14 Sum_Pay from dual
union all
select 4 id, 'B' Client, 15 Sum_Pay from dual
union all
select 5 id, 'B' Client, 16 Sum_Pay from dual
union all
select 6 id, 'B' Client, 17 Sum_Pay from dual
union all
select 7 id, 'C' Client, 18 Sum_Pay from dual
union all
select 8 id, 'C' Client, 19 Sum_Pay from dual
union all
select 9 id, 'C' Client, 20 Sum_Pay from dual
)
select
C.id
-- ,C.Client
,decode(ROW_NUMBER() OVER (PARTITION BY Client ORDER by id), 1, Client, null) Client_Name
,Sum_Pay
from C
order by C.Client, id
Вот так задуманное будет выглядет в любом гриде без обработчиков.
-
а поменять ФИО и код банка слабо ?
-
> ANB (11.04.08 18:09) [11]
Так это ж Оракл, явно не скала
-
> Вот так задуманное будет выглядет в любом гриде без обработчиков.
Как мы все рады за тебя!
-
> Виталий Панасенко(дом) (11.04.08 19:24) [12] > а поменять ФИО и код банка слабо ?
А я order by сделал сначала по коду а потом по фио и уменя получился нормально. Спасибо всем :)
-
> Виталий Панасенко(дом) (11.04.08 19:51) [13] > > > ANB (11.04.08 18:09) [11] > > Так это ж Оракл, явно не скала
Ну да. А у мс скл нету аналога ???
|