Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Полосатый TDBGridEh   Найти похожие ветки 

 
kyn66 ©   (2009-05-18 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. А с ним есть проблемы, используя данный метод. Полосатость может нарушиться.


 
Виталий Панасенко   (2009-05-18 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 ©   (2009-05-18 17:13) [2]

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


 
kyn66 ©   (2009-05-19 16:10) [3]

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


 
Сергей М. ©   (2009-05-19 16:27) [4]

А поставить брейкпойнт на строчку

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

и посмотреть под отладчиком, чему же на самом деле равен RecNo, Коран не позволяет ?


 
Ega23 ©   (2009-05-19 16:54) [5]


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


Всё просто. TDataSet.RecNo - штука такая. Неопределённая. Зависит от многих вещей.


 
Виталий Панасенко   (2009-05-19 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 ©   (2009-05-19 17:59) [7]

> [5] Ega23 ©   (19.05.09 16:54)
> Всё просто. TDataSet.RecNo - штука такая. Неопределённая.

И переопределённая.:)


 
Александр из Перми   (2009-05-20 22:15) [8]

возникает такой же вопрос вкупе с датасетом из FIBPlus.
Почему то корректно прорисовывает только если :
1) все строки вмещаются в видимую часть грида
2) если проскроллировать до низу, а потом делать скролл вверх, то за курсором начинает прорисовываться
3) Если выбрать все записи по FetchAll

Считаю все три способа корявыми, а как же правильно  делать то?


 
turbouser ©   (2009-05-20 22:20) [9]


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

1: вариант 3) - самое то :)
2: стоит узнать о IB/FB немного больше...
3: Заместо EhLib надо использовать DevExpress, в качестве
альтернативы которого EhLib и создавался.


 
Александр из Перми   (2009-05-20 22:46) [10]


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

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

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

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

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


 
turbouser ©   (2009-05-20 23:00) [11]


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

Серьезно.

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

Эээммм.. Трудно связать  тему сабжа ( :) ) с девекспресс, но телепатор
подсказывает, что свободны :) там полосатость делается совсем не так, если что.


 
Германн ©   (2009-05-21 01:14) [12]


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

Эт точно! Там полосатость делается ну очень совсем не так! Впрочем, так же "не так" как и в EhLib.
Единственно "нормальная" "полосатость" только тут
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=168


 
Виталий Панасенко   (2009-05-21 09:58) [13]


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

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


 
Виталий Панасенко   (2009-05-21 09:59) [14]

2) и 3) как раз этому и способствуют


 
Ega23 ©   (2009-05-21 10:10) [15]


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


RecordCount - правильное. Нужно чтобы RecNo правильным быд. А это - не всегда.  :)


 
kyn66 ©   (2009-05-21 12:42) [16]


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

Если быть точнее, то RecNo А он действительно иногда не правильно выстраивается. Замечено, что все траблы возникают, если включена индексация, т.е. записи выстроены по ключевому полю. А как это побороть - не знаю


 
Виталий Панасенко   (2009-05-21 14:42) [17]

А как у кверика может быть не подряд RecNo?
> В данном случае задейсвован TQuery. А с ним есть проблемы,
>  используя данный метод. Полосатость может нарушиться.
>

И при чем тут индексация к кверику?


 
Ega23 ©   (2009-05-21 15:56) [18]


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


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

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

А теперь мы наложили на эту байду фильтр. Или отсортировали его по другому полю (не средствами SQL, а через IndexField).
Лично я затрудняюсь сказать, что в данном случае будет с RecNo (особенно в случае фильтра).


 
Виталий Панасенко(дом)   (2009-05-21 18:51) [19]

:-) с дуру можно и .. поломать... несмотря на то, что это - ГИДРАВЛИКА! :-)))))


 
имя   (2009-05-21 18:53) [20]

Удалено модератором


 
kyn66 ©   (2009-05-22 11:04) [21]

Да, да, именно после применения IndexField начинаются непонятки.


 
kyn66 ©   (2009-05-22 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 ©   (2009-05-22 11:56) [23]

Пардон, очепятка номера 33 и 69


 
Виталий Панасенко   (2009-05-22 11:58) [24]

Когда применяется IndexField, то RecNo действительно будет фиг знает какой.. И никуда от этого не убежишь.. разве что в select from order by


 
Ega23 ©   (2009-05-22 12:04) [25]


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


OnGetColumncellData или что-то в таком духе. И сам рисуешь. Делов-то.


 
Виталий Панасенко   (2009-05-22 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
вот и все


 
Виталий Панасенко   (2009-05-22 12:22) [27]

при использовании кверика с упорядочением проблема исчезнет сама по себе. если, конечно, не использовать сортировку кеша кверика


 
kyn66 ©   (2009-05-22 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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.071 c
2-1270365241
Ms-R
2010-04-04 11:14
2010.08.27
поворот RECT


15-1266047756
oldman
2010-02-13 10:55
2010.08.27
Ну вот и началась Олимпиада!


11-1220855217
S.K.
2008-09-08 10:26
2010.08.27
Запуск браузера с параметрами в адресной строке


15-1270041267
12
2010-03-31 17:14
2010.08.27
Прикольный рудимент. D7.XP.


15-1275683377
Юрий
2010-06-05 00:29
2010.08.27
С днем рождения ! 5 июня 2010 суббота





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский