Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

Проблемы с DBGridом   Найти похожие ветки 

 
Xmen   (2008-04-11 13:54) [0]

Привет мастерам!
У меня такая проблема не получается без вашего мещательства. Я получаю данные из базы и показываю в гриде (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;


 
Sergey13 ©   (2008-04-11 14:04) [1]

Боюсь соврать, но вроде в ЕхГриде была такая фича, выставлялась какими то пропертями. Под рукой нет - не вспомню.

ИМХО - это достаточно вредная штука, ибо может быть это и не тот же самый Иванов И.И.
Мало ли в Бразилии Донов Педров. (с) Дона Роза Д"альвадорес


 
Reindeer Moss Eater ©   (2008-04-11 14:06) [2]

if (Column.FieldName="client_fio") then
begin
   if Column.Field.Dataset.FieldbyName("client_fio").AsString = ss then


Это пестня.


 
Anatoly Podgoretsky ©   (2008-04-11 14:12) [3]

> Xmen  (11.04.2008 13:54:00)  [0]

Это можно сделать или с зеркальным массивом, индекс+признак, или переход на StringGrid
Это ты еще не тестировал.


 
Xmen   (2008-04-11 14:34) [4]


> Anatoly Podgoretsky ©   (11.04.08 14:12) [3]
> > Xmen  (11.04.2008 13:54:00)  [0]Это можно сделать или
> с зеркальным массивом, индекс+признак, или переход на StringGridЭто
> ты еще не тестировал.

Незнаю очем вы говорите, наверно непонял


 
Anatoly Podgoretsky ©   (2008-04-11 15:02) [5]

> Xmen  (11.04.2008 14:34:04)  [4]

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


 
Виталий Панасенко(дом)   (2008-04-11 15:56) [6]


> Sergey13 ©   (11.04.08 14:04) [1]
>
> Боюсь соврать, но вроде в ЕхГриде была такая фича, выставлялась
> какими то пропертями. Под рукой нет - не вспомню.

Умеет факт.


 
Виталий Панасенко(дом)   (2008-04-11 15:58) [7]

В дизайнере колонок(или ран-тайме, как нравиться) для колонки ФИО(из примера автора) HideDuplicates:=True


 
Xmen   (2008-04-11 16:30) [8]

Спасибо за советы, у меня кое что получился.      

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;


 
Xmen   (2008-04-11 16:50) [9]


> Виталий Панасенко(дом)   (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
Как мне быть?


 
Reindeer Moss Eater ©   (2008-04-11 17:09) [10]

if Column.Field.Dataset.FieldbyName("client_fio").AsString = ss then

то же самое что и

if Column.Field.AsString = ss then

с учетом предыдущего ифа


 
ANB   (2008-04-11 18:09) [11]


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


Вот так задуманное будет выглядет в любом гриде без обработчиков.


 
Виталий Панасенко(дом)   (2008-04-11 19:24) [12]

а поменять  ФИО и код банка слабо ?


 
Виталий Панасенко(дом)   (2008-04-11 19:51) [13]


> ANB   (11.04.08 18:09) [11]

Так это ж Оракл, явно не скала


 
Johnmen ©   (2008-04-11 20:29) [14]


> Вот так задуманное будет выглядет в любом гриде без обработчиков.

Как мы все рады за тебя!


 
Xmen   (2008-04-12 08:46) [15]


> Виталий Панасенко(дом)   (11.04.08 19:24) [12]
> а поменять  ФИО и код банка слабо ?

А я order by сделал сначала по коду а потом по фио и уменя получился нормально. Спасибо всем :)


 
ANB   (2008-04-14 10:29) [16]


> Виталий Панасенко(дом)   (11.04.08 19:51) [13]
>
> > ANB   (11.04.08 18:09) [11]
>
> Так это ж Оракл, явно не скала

Ну да. А у мс скл нету аналога ???



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

Текущий архив: 2008.10.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
2-1220193371
dars73
2008-08-31 18:36
2008.10.12
Округление чисел


2-1220073543
DarkLord
2008-08-30 09:19
2008.10.12
Имитация DblClick


3-1207245676
kotyara12
2008-04-03 22:01
2008.10.12
Рекурсивная выборка из таблицы со структурой дерева


15-1219671790
Vlad Oshin
2008-08-25 17:43
2008.10.12
можно ли поставить oracle 10gXE(бесплатный который) копированием?


3-1201092353
Rusl92
2008-01-23 15:45
2008.10.12
Картинки в БД