Конференция "Базы" » Полосатый TDBGridEh [D7, ADS]
 
  • kyn66 © (18.05.09 16:42) [0]
    Доброго времени суток, мастера. На форме лежит TDBGridEh. По идее он должен иметь возможность самостоятельно рисоваться полосатым. Однако это не происходит. Какое условие должно выполняться, чтобы он рисовался полосатым? Если устанавливаю OddRowColor в свой цвет - ничего не происходит. Обычно для отрисовки полосатости привязываюсь к таблице. Но это гладко проходит, если используется компонент TTable.

    procedure TTovarFrm.DBGridEh1GetCellParams(Sender: TObject;
     Column: TColumnEh; AFont: TFont; var Background: TColor;
     State: TGridDrawState);
    begin
     if (DM1.TovarTbl.RecNo mod 2 <> 0) then
      Background := clWhite
     else
      Background := clBtnFace;
    end;


    В данном случае задейсвован TQuery. А с ним есть проблемы, используя данный метод. Полосатость может нарушиться.
  • Виталий Панасенко (18.05.09 16:54) [1]
    Справка, выдержка.
    pecifies the color of odd rows in the grid.

    property OddRowColor: TColor;

    Description

    Use OddRowColor to specify the color of odd rows in the grid. It works only if sequence numbers are available for DataSet(DataSet.IsSequenced = True) and DataSet.RecNo return valid info. More often you will use OddRowColor in combination with EvenRowColor.

    EhLib Software
  • kyn66 © (18.05.09 17:13) [2]
    ДА, действительно так работает. Спасибо. Посмотрим как в дальнейшем будет отрабатывать при большем кол-ве записей.
  • kyn66 © (19.05.09 16:10) [3]
    Не работает, для TQuery идет сбой в очередности полос-зебры.
  • Сергей М. © (19.05.09 16:27) [4]
    А поставить брейкпойнт на строчку

    if (DM1.TovarTbl.RecNo mod 2 <> 0) then

    и посмотреть под отладчиком, чему же на самом деле равен RecNo, Коран не позволяет ?
  • Ega23 © (19.05.09 16:54) [5]

    > Не работает, для TQuery идет сбой в очередности полос-зебры.


    Всё просто. TDataSet.RecNo - штука такая. Неопределённая. Зависит от многих вещей.
  • Виталий Панасенко (19.05.09 16:59) [6]

    > kyn66 ©   (19.05.09 16:10) [3]
    >
    > Не работает, для TQuery идет сбой в очередности полос-зебры.
    >

    А зачем применять СВОЙ метод, если есть готовый у EhLib? и выполняется условие
    > It works only if sequence numbers are available for DataSet(DataSet.
    > IsSequenced = True) and DataSet.RecNo return valid info
    ?
  • AndreyV © (19.05.09 17:59) [7]
    > [5] Ega23 ©   (19.05.09 16:54)
    > Всё просто. TDataSet.RecNo - штука такая. Неопределённая.

    И переопределённая.:)
  • Александр из Перми (20.05.09 22:15) [8]
    возникает такой же вопрос вкупе с датасетом из FIBPlus.
    Почему то корректно прорисовывает только если :
    1) все строки вмещаются в видимую часть грида
    2) если проскроллировать до низу, а потом делать скролл вверх, то за курсором начинает прорисовываться
    3) Если выбрать все записи по FetchAll

    Считаю все три способа корявыми, а как же правильно  делать то?
  • turbouser © (20.05.09 22:20) [9]

    > Александр из Перми   (20.05.09 22:15) [8]

    1: вариант 3) - самое то :)
    2: стоит узнать о IB/FB немного больше...
    3: Заместо EhLib надо использовать DevExpress, в качестве
    альтернативы которого EhLib и создавался.
  • Александр из Перми (20.05.09 22:46) [10]

    > 1: вариант 3) - самое то :)

    Серьезно или шутка? (смайлик смущает, хочется однозначного ответа) А если записей много? Или Очень много? Это все кэшируется у клиента чтоле?

    2: стоит узнать о IB/FB немного больше...

    стоит узнать о IB/FB намного больше (нутром чюю, плаваю) Изучаю.

    А компоненты от Девэкспресс свободны от темы сабжа?
  • turbouser © (20.05.09 23:00) [11]

    > Александр из Перми   (20.05.09 22:46) [10]
    >
    >
    > > 1: вариант 3) - самое то :)
    >
    > Серьезно или шутка?

    Серьезно.

    >
    > А компоненты от Девэкспресс свободны от темы сабжа?

    Эээммм.. Трудно связать  тему сабжа ( :) ) с девекспресс, но телепатор
    подсказывает, что свободны :) там полосатость делается совсем не так, если что.
  • Германн © (21.05.09 01:14) [12]

    > Там полосатость делается совсем не так, если что.

    Эт точно! Там полосатость делается ну очень совсем не так! Впрочем, так же "не так" как и в EhLib.
    Единственно "нормальная" "полосатость" только тут
    http://www.delphikingdom.com/asp/viewitem.asp?catalogid=168
  • Виталий Панасенко (21.05.09 09:58) [13]

    > Александр из Перми   (20.05.09 22:15) [8]

    Нужно, чтобы было правильное значение RecordCount
  • Виталий Панасенко (21.05.09 09:59) [14]
    2) и 3) как раз этому и способствуют
  • Ega23 © (21.05.09 10:10) [15]

    > Нужно, чтобы было правильное значение RecordCount


    RecordCount - правильное. Нужно чтобы RecNo правильным быд. А это - не всегда.  :)
  • kyn66 © (21.05.09 12:42) [16]

    > Нужно, чтобы было правильное значение RecordCount

    Если быть точнее, то RecNo А он действительно иногда не правильно выстраивается. Замечено, что все траблы возникают, если включена индексация, т.е. записи выстроены по ключевому полю. А как это побороть - не знаю
  • Виталий Панасенко (21.05.09 14:42) [17]
    А как у кверика может быть не подряд RecNo?
    > В данном случае задейсвован TQuery. А с ним есть проблемы,
    >  используя данный метод. Полосатость может нарушиться.
    >

    И при чем тут индексация к кверику?
  • Ega23 © (21.05.09 15:56) [18]

    > А как у кверика может быть не подряд RecNo?


    Легко. ЕМНИП, в TRxQuery RecNo всегда равен -1, если в НД присутствует хотя бы одно BLOB-поле (или строковое, больше чем 255, что тоже BLOB).

    Далее. Вот есть таблица с полем ID, значения [1..100].
    Вот мы выполнили Select * from table order by ID.
    Предположим, наш потомок TDataSet корректно работает с RecNo - в нём действительно то, что мы ожидаем.

    А теперь мы наложили на эту байду фильтр. Или отсортировали его по другому полю (не средствами SQL, а через IndexField).
    Лично я затрудняюсь сказать, что в данном случае будет с RecNo (особенно в случае фильтра).
  • :-) с дуру можно и .. поломать... несмотря на то, что это - ГИДРАВЛИКА! :-)))))
  • имя (21.05.09 18:53) [20]
    Удалено модератором
  • kyn66 © (22.05.09 11:04) [21]
    Да, да, именно после применения IndexField начинаются непонятки.
  • kyn66 © (22.05.09 11:49) [22]
    Вот явное нарушение полосатости посли Индексации http://yurec66.narod.ru/Hlam/grid1.jpg. По началу я думал что это происходит из-за нарушения порядка следования ID. Здесь видно, что номера 33 и 39(специально в грид добавлен для отображения столбец ID) (оба нечетные) стоят рядом, поэтому и идет нарушение. http://yurec66.narod.ru/Hlam/grid2.jpg . Однако, тут-же видно, что номера 29 и 30 тоже стоят рядом, хоть и разные по четности. Тем более задействован стандартный механизм Sequenced и использован компонент TAdsTable. Т.ч. уже и не ясно на что грешить и как это побороть.
  • kyn66 © (22.05.09 11:56) [23]
    Пардон, очепятка номера 33 и 69
  • Виталий Панасенко (22.05.09 11:58) [24]
    Когда применяется IndexField, то RecNo действительно будет фиг знает какой.. И никуда от этого не убежишь.. разве что в select from order by
  • Ega23 © (22.05.09 12:04) [25]

    > Т.ч. уже и не ясно на что грешить и как это побороть.


    OnGetColumncellData или что-то в таком духе. И сам рисуешь. Делов-то.
  • Виталий Панасенко (22.05.09 12:19) [26]

    > Здесь видно, что номера 33 и 39(специально в грид добавлен
    > для отображения столбец ID) (оба нечетные) стоят рядом,
    > поэтому и идет нарушение. http://yurec66.narod.ru/Hlam/grid2.
    > jpg . Однако, тут-же видно, что номера 29 и 30 тоже стоят
    > рядом, хоть и разные по четности. Тем более задействован
    > стандартный механизм Sequenced и использован компонент TAdsTable.
    >  Т.ч. уже и не ясно на что грешить и как это побороть.

    29  и 30 просто повезло: у них ключевая информация идет подряд и нету записи с данными, ключ которой больше ключа 29, но меньше 30. неужели так тяжело понять? у вас записи идут типа так
    № записи Значение
    1                0
    2                1
    3                -1
    4                2
    если упорядочить по значению, что получим?
    № записи Значение
    3               -1
    1                0
    2                1
    4                2
    вот и все
  • Виталий Панасенко (22.05.09 12:22) [27]
    при использовании кверика с упорядочением проблема исчезнет сама по себе. если, конечно, не использовать сортировку кеша кверика
  • kyn66 © (22.05.09 17:16) [28]
    К кверику нельзя в данном случае применить сортровку, физическое поле отсутствует, точнее поле Name, по которому хотелось-бы сделать сортировку выводится как лукаповское поле. ПОэтому пришлось идти на ухищрения с собственной обработкой

    procedure TTovarFrm.DBGridEh1GetCellParams(Sender: TObject;
     Column: TColumnEh; AFont: TFont; var Background: TColor;
     State: TGridDrawState);
    begin
     Background := BackColors[(Sender as TDBGridEh).DataSource.DataSet.RecNo mod 2 <> 0];
    end;



    или попытаться довериться обработке Delphi через Sequenced
 
Конференция "Базы" » Полосатый TDBGridEh [D7, ADS]
Есть новые Нет новых   [134473   +32][b:0][p:0.001]