Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];

Вниз

Проблемы с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.051 c
1-1199613842
WebSQLNeederr
2008-01-06 13:04
2008.10.12
как перевести код с картинки средствами делфи?


2-1220607350
igor666
2008-09-05 13:35
2008.10.12
Помогите с курсорами.


2-1220067889
Alexey
2008-08-30 07:44
2008.10.12
ISAPI и БД


2-1220459844
Mariks
2008-09-03 20:37
2008.10.12
InternetOpenURL


15-1219251940
ProgRAMmer Dimonych
2008-08-20 21:05
2008.10.12
Своя замена для Windows Explorer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский