![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нарушение полосатости грида при SQL-запросах [D7, WinXP]
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 помогло исправить ситуацию