Конференция "Базы" » Проблемы с DBGridом [D7, MSSQL]
 
  • Xmen (11.04.08 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 © (11.04.08 14:04) [1]
    Боюсь соврать, но вроде в ЕхГриде была такая фича, выставлялась какими то пропертями. Под рукой нет - не вспомню.

    ИМХО - это достаточно вредная штука, ибо может быть это и не тот же самый Иванов И.И.
    Мало ли в Бразилии Донов Педров. (с) Дона Роза Д'альвадорес
  • Reindeer Moss Eater © (11.04.08 14:06) [2]
    if (Column.FieldName='client_fio') then
    begin
       if Column.Field.Dataset.FieldbyName('client_fio').AsString = ss then


    Это пестня.
  • Anatoly Podgoretsky © (11.04.08 14:12) [3]
    > Xmen  (11.04.2008 13:54:00)  [0]

    Это можно сделать или с зеркальным массивом, индекс+признак, или переход на StringGrid
    Это ты еще не тестировал.
  • Xmen (11.04.08 14:34) [4]

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

    Незнаю очем вы говорите, наверно непонял
  • Anatoly Podgoretsky © (11.04.08 15:02) [5]
    > Xmen  (11.04.2008 14:34:04)  [4]

    Там много слов, какие ты не понял, иностранное только одно, но с ним совсем просто, просто добавь букву Т в начале и нажми F1
  • Виталий Панасенко(дом) (11.04.08 15:56) [6]

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

    Умеет факт.
  • Виталий Панасенко(дом) (11.04.08 15:58) [7]
    В дизайнере колонок(или ран-тайме, как нравиться) для колонки ФИО(из примера автора) HideDuplicates:=True
  • Xmen (11.04.08 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 (11.04.08 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 © (11.04.08 17:09) [10]
    if Column.Field.Dataset.FieldbyName('client_fio').AsString = ss then

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

    if Column.Field.AsString = ss then

    с учетом предыдущего ифа
  • ANB (11.04.08 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



    Вот так задуманное будет выглядет в любом гриде без обработчиков.
  • Виталий Панасенко(дом) (11.04.08 19:24) [12]
    а поменять  ФИО и код банка слабо ?
  • Виталий Панасенко(дом) (11.04.08 19:51) [13]

    > ANB   (11.04.08 18:09) [11]

    Так это ж Оракл, явно не скала
  • Johnmen © (11.04.08 20:29) [14]

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

    Как мы все рады за тебя!
  • Xmen (12.04.08 08:46) [15]

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

    А я order by сделал сначала по коду а потом по фио и уменя получился нормально. Спасибо всем :)
  • ANB (14.04.08 10:29) [16]

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

    Ну да. А у мс скл нету аналога ???
 
Конференция "Базы" » Проблемы с DBGridом [D7, MSSQL]
Есть новые Нет новых   [134433   +21][b:0][p:0.001]