Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нарушение полосатости грида при SQL-запросах [D7, WinXP]


Страницы:   1 2 3 4

kyn66 ©   (2009-09-02 13:46:00) 

Добрый день. Когда то я здесь задавал вопрос по теме САБЖ. Решение вопроса так и небыло достигнуто. Сейчас я всетаки обнаружил ответ на этот вопрос и с радостью хочу поделиться со всеми, кто сталкивался с такой проблемой. Исходные данные:
TDBGridEx, TAdsQueryВо время  формирования запроса и сортировки по одному из полей, порядок следования цветных полос сбивался, когда я использовал вот это:

procedure TMainFrm.DBGridEh1GetCellParams(Sender: TObject;
 Column: TColumnEh; AFont: TFont; var Background: TColor;
 State: TGridDrawState);
begin
...
Const
 BackColors : array[Boolean] of TColor = (clWhite, clBtnFace);
...
 Background := BackColors[(Sender as TDBGridEh).DataSource.DataSet.RecNo mod 2 <> 0];
end;


Затем этот способ представления полосатости был заменен использование свойств самого TAdsQuery Sequenced. Но и после этого картина не изменилась! Сегодня я случайно обратил внимание еще на одно свойство SecuencedLevelи решил его проверить. Когда оно было по умолчанию slStandard- ничего не менялось. Но стоило мне его изменить на slExact- все заработало как нужно!!! "Полосатость" восстановилась при любых забросах. Так что, если кому это пригодится - запоминайте!


Сергей М.   (2009-09-04 10:32:00) [41]


> почему он всетаки не рисует полосы чередованием?


Потому что всеобщая правильная волосатость-чередоватость возможна лишь в случае, когда запрашиваемый НД, визуализируемый гридом, либо однонаправленный либо НД фетчится целиком и для навигации по нему используется курсор (не путать с мышиным) клиентской (а не серверной) стороны.
На огурцах - для расчета четных и нечетных записей требуется знать, сколько всего записей содержится в НД и каков порядковый номер каждой визуализируемой в дан.момент записи из этого НД. Если гриду эта информация по тем или иным причина недоступна, красить он будет как попало.


Anatoly Podgoretsky   (2009-09-04 10:00:00) [42]

> kyn66  (04.09.2009 09:36:20)  [20]

Всеобщую волосатость грида достигнуть трудно, практически невозможно, поэтому все примеры, реализуют только частичную.


kyn66   (2009-09-04 09:36:00) [43]

Если на то пошло, то цвета там стоят по умолчанию, допустим не важно какие, главное что разные. Эти цвета будут задействованы в том случае, если включено свойство Sequenced.


> А уж как он там будет высчитывать четные и нечетные - это
> не твоя забота.


ТАк как-же он всеже будет вычислять, почему не вычисляет? Почему не полосатирует?

> Ты чего такой трудный ?)

ЗАчем так сказаль плохо? Вот она теоретическая версия http://yurec66.narod.ru/Vopros/qver1.jpg, а вот что на практике получается http://yurec66.narod.ru/Vopros/qver2.jpg
НУ и при чем тут трудность? Какие еще данные нужно предоставить, чтобы решить, почему он всетаки не рисует полосы чередованием?


Сергей М.   (2009-09-03 17:34:00) [44]


> Толку с этого? Каким образом строками управлять?


Что значит "строками управлять" ?
Какое еще"управление" тебе нужно для реализации "полосатости", если достаточно установкой св-ва EvenRowColor сказать тем самым гриду "Крась четные строки в такой-то цвет !", а установкой OddRowColor - "А нечетный в такой-то другой цвет !"
А уж как он там будет высчитывать четные и нечетные - это не твоя забота.

Ты чего такой трудный ?)


Медвежонок Пятачок   (2009-09-03 17:32:00) [45]

> пример лежит в TCustomDBGridEh.DrawCell


kyn66   (2009-09-03 16:53:00) [46]

Пардон, нашел в свойсвах DBGridEx. НУ и дальше то что, что я там укажу свои цвета. Толку с этого? Каким образом строками управлять?


kyn66   (2009-09-03 16:51:00) [47]


> Совет был с самого начала использовать OddRowColor и EvenRowColor


Что это такое? Не нахошу таких определений в модулях Delphi


Медвежонок Пятачок   (2009-09-03 16:43:00) [48]

Совет был с самого начала использовать OddRowColor и EvenRowColor


kyn66   (2009-09-03 16:33:00) [49]


> пример лежит в TCustomDBGridEh.DrawCell

Спасибо за поучительный совет.


Медвежонок Пятачок   (2009-09-03 16:04:00) [50]

пример лежит в TCustomDBGridEh.DrawCell


kyn66   (2009-09-03 15:11:00) [51]


> так как строки в гриде есть и у них точно есть порядковые
> номера сверху вниз (речь про элементы самого грида)


И каким образом это сделать? На какое событие опираться? Я использовал оба способа. Лично я так думаю. Примером можно показать , как будет правильно?


Медвежонок Пятачок   (2009-09-03 12:59:00) [52]

чего непонтяно-то?
красить строки грида можно на основе свойств датасета, а можно на основе свойств самого грида.
так как строки в гриде есть и у них точно есть порядковые номера сверху вниз (речь про элементы самого грида)
а датасет с его записями для раскраски грида не нужен


kyn66   (2009-09-03 12:52:00) [53]


> так и дальше будет, если ориетнироваться на датасет, а не
> на строки кастомгрида


Не совсем понятен ответ. Ситуация применения и там и там одинакова. Я уже начал думать про наличие типов полей датасета


Медвежонок Пятачок   (2009-09-03 12:19:00) [54]

так и дальше будет, если ориетнироваться на датасет, а не на строки кастомгрида


kyn66   (2009-09-03 12:00:00) [55]

Внимательно читать продолжение поста нужно
Затем этот способ представления полосатости был заменен использование свойств самого TAdsQuery Sequenced.


И было уже проверено, данные выводились как положено. А когда попробывал применить ко второй проге - там произошел обломс


Медвежонок Пятачок   (2009-09-03 11:43:00) [56]

Мусолить можно сколько угодно.
Только закон джунглей русским по белому говорит:

Description

As implemented in TDataSet, the value of RecNo is always -1. Ordinarily an application does not access RecNo at the TDataSet level. Instead a re-implemented RecNo property in a descendant class such as TTable is accessed. RecNo provides a fallback property for derived datasets that do not support record numbers.


Медвежонок Пятачок   (2009-09-03 11:40:00) [57]

а это что такое?

Background := BackColors[(Sender as TDBGridEh).DataSource.DataSet.RecNo mod 2 <> 0];


kyn66   (2009-09-03 11:35:00) [58]


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


Старый использованный метод я не обсуждаю. Сейчас речь идет о самостоятельном полосовании через Sequenced


Медвежонок Пятачок   (2009-09-03 11:28:00) [59]

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


kyn66   (2009-09-03 11:19:00) [60]

ДА, но в первом случае SecuencedLevel помогло исправить ситуацию


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо