![]() |
| ||
|
|
Новости |
Поиск |
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- все заработало как нужно!!! "Полосатость" восстановилась при любых забросах. Так что, если кому это пригодится - запоминайте!
kyn66 (2009-09-09 11:04:00) [1]
> "Нужно чтобы компонент отрабатывал то, что в нем предписано"
[20]
kyn66 (2009-09-09 10:59:00) [2]
> Тогда извольтк изъясняться внятно и понятно, что же Вам
> требуется.
[5]
Плохиш (2009-09-08 20:10:00) [3]
> т.к. у датасетаимеется своя способность разукрашивать фон
> в полосатый.
Это какая же?
MsGuns (2009-09-08 18:07:00) [4]>kyn66 © (07.09.09 16:39) [58]
>> Насколько я понял, автору нужно, чтобы каждая запись датасета
>> имела что-то вроде св-ва "чет-нечет",
>Совершенно не нужно. Нужно чтобы компонент отрабатывал то, что в нем >предписано
Тогда извольтк изъясняться внятно и понятно, что же Вам требуется. При этом некисло было бы узнать о том, что Вы понимаете под таинственной фразой "Нужно чтобы компонент отрабатывал то, что в нем предписано"
kyn66 (2009-09-07 16:39:00) [5]Все заморочки по поводу четности-нечетности имеют место быть, если использовался метод Background := BackColors[(Sender as TDBGridEh).DataSource.DataSet.RecNo mod 2 <> 0];Но с этим решено было покончить, т.к. у датасета имеется своя способность разукрашивать фон в полосатый. Вот здесь и пытаюсь понять почему он не срабатывает. Что на это влияет.?
> Насколько я понял, автору нужно, чтобы каждая запись датасета
> имела что-то вроде св-ва "чет-нечет",
Совершенно не нужно. Нужно чтобы компонент отрабатывал то, что в нем предписано
kyn66 (2009-09-07 16:34:00) [6]
> Неа. Удаляем "эту" запись, а ее соседи остаются четными/нечетными.
> Получаем две соседние записи одного цвета.Полосатость пропадает.
>
Совершенно верно
> Речь не шла об удалении вообще-то. А по поводу перемешивания
> или пропадания записей
За счет удаления происходят те-же нарушения.
Медвежонок Пятачок (2009-09-07 16:01:00) [7]все читаем.
требование к записи датасета быть всегда четной или нечетной - это лишнее.
грид сам по себе имеет строго определенное число строк.
и у них нет таких заморочек с порядком следования как у записей датасета.
MsGuns (2009-09-07 15:54:00) [8]>Медвежонок Пятачок © (07.09.09 13:45) [54]
Речь не шла об удалении вообще-то. А по поводу перемешивания или пропадания записей из сетки в том же посте имеется второе предложение. Его не читаем ?
Медвежонок Пятачок (2009-09-07 13:45:00) [9]Насколько я понял, автору нужно, чтобы каждая запись датасета имела что-то вроде св-ва "чет-нечет", в соответствии с которым ее нужно отображать в сетке "своим" цветом.
Неа. Удаляем "эту" запись, а ее соседи остаются четными/нечетными.
Получаем две соседние записи одного цвета.
Полосатость пропадает.
Германн (2009-09-06 03:12:00) [10]
> KilkennyCat © (06.09.09 02:50) [52]
>
> О, я придумал!
Дай код!
:)
KilkennyCat (2009-09-06 02:50:00) [11]О, я придумал! пусть будет так, как делает автор, но не чет-нечет, а в порядке радуги. Тогда, после отображения с каким-либо условием, мы получим дополнительную яркую цветовую информацию этого условия.
MsGuns (2009-09-06 00:32:00) [12]>Юрий Зотов © (05.09.09 13:32) [47]
>Не понимаю, в чем проблема?
Насколько я понял, автору нужно, чтобы каждая запись датасета имела что-то вроде св-ва "чет-нечет", в соответствии с которым ее нужно отображать в сетке "своим" цветом. Т.е. запись с №=17 ВСЕГДА была окрашена как "нечет" вне зависимости в какой (четной или нечетной) строке сетки она отображалась. Что при этом будет с "полосатостью" в случае, если НД будет переупорядочен на клиенте или, как несколько раз повторил АП, отфильтрован, очевидно для всех, кроме автора.
Вообще не понимаю откуда возникла подобная трабла.
KilkennyCat (2009-09-05 19:38:00) [13]которые уже и не FAQ, а сверхFAQ
СовестьДМ (2009-09-05 18:28:00) [14]Удалено модератором
Юрий Зотов (2009-09-05 17:48:00) [15]И даже FillRect можно убрать. Само закрасится.
Юрий Зотов (2009-09-05 13:32:00) [16]Не понимаю, в чем проблема?
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if ([gdSelected, gdFixed] * State = [])
and Odd(DBGrid1.MouseCoord(Rect.Left, Rect.Top).Y) then
with DBGrid1, Canvas do
begin
Brush.Color := clYellow;
FillRect(Rect);
DefaultDrawDataCell(Rect, Column.Field, State);
end
end;
Anatoly Podgoretsky (2009-09-04 16:50:00) [17]> kyn66 (04.09.2009 16:41:45) [45]
Нельзя найти кошку в темной комнате, если ее там нет.
kyn66 (2009-09-04 16:41:00) [18]2Anatoly Podgoretsky
Уважаемый коллега, не в обиду будет сказано, но вы постоянно пытаетесь меня запутать своими высокоматерчатыми выражениями. Мне кажется мы перелопачиваем по несколькеу раз одну и ту-же проблему, а варианта ее решения вы так и не предлагаете.
Anatoly Podgoretsky (2009-09-04 16:28:00) [19]> kyn66 (04.09.2009 16:05:43) [43]
Не надо про частный случай, специально подогнаный, я же про полноценную работу, с локальной сортировкой, с фильтрацией, с обработчиком OnFilterRecord, с физическими и логическими номера, с использованием как запросов, так и с навигационными методами работы, и прочим.
Один лишь OnFilterRecord сводит на нет все потуги.
kyn66 (2009-09-04 16:05:00) [20]
> СУБД-то какая ?
Так в [1] было описано про TADSQuery, сопсна ADS.
> Никогда не будет в порядке.
Что-ж так категорично? Ведь при формировании нового набора и записи с нуля начинают формироваться.