![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Полосатый TDBGridEh [D7, ADS]
kyn66 © (2009-05-18 16:42:00)Доброго времени суток, мастера. На форме лежит 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. А с ним есть проблемы, используя данный метод. Полосатость может нарушиться.
kyn66 (2009-05-22 17:16:00) [1]К кверику нельзя в данном случае применить сортровку, физическое поле отсутствует, точнее поле 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
Виталий Панасенко (2009-05-22 12:22:00) [2]при использовании кверика с упорядочением проблема исчезнет сама по себе. если, конечно, не использовать сортировку кеша кверика
Виталий Панасенко (2009-05-22 12:19:00) [3]
> Здесь видно, что номера 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
вот и все
Ega23 (2009-05-22 12:04:00) [4]
> Т.ч. уже и не ясно на что грешить и как это побороть.
OnGetColumncellData или что-то в таком духе. И сам рисуешь. Делов-то.
Виталий Панасенко (2009-05-22 11:58:00) [5]Когда применяется IndexField, то RecNo действительно будет фиг знает какой.. И никуда от этого не убежишь.. разве что в select from order by
kyn66 (2009-05-22 11:56:00) [6]Пардон, очепятка номера 33 и 69
kyn66 (2009-05-22 11:49:00) [7]Вот явное нарушение полосатости посли Индексации 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:04:00) [8]Да, да, именно после применения IndexField начинаются непонятки.
(2009-05-21 18:53:00) [9]Удалено модератором
Виталий Панасенко(дом) (2009-05-21 18:51:00) [10]:-) с дуру можно и .. поломать... несмотря на то, что это - ГИДРАВЛИКА! :-)))))
Ega23 (2009-05-21 15:56:00) [11]
> А как у кверика может быть не подряд RecNo?
Легко. ЕМНИП, в TRxQuery RecNo всегда равен -1, если в НД присутствует хотя бы одно BLOB-поле (или строковое, больше чем 255, что тоже BLOB).
Далее. Вот есть таблица с полем ID, значения [1..100].
Вот мы выполнили Select * from table order by ID.
Предположим, наш потомок TDataSet корректно работает с RecNo - в нём действительно то, что мы ожидаем.
А теперь мы наложили на эту байду фильтр. Или отсортировали его по другому полю (не средствами SQL, а через IndexField).
Лично я затрудняюсь сказать, что в данном случае будет с RecNo (особенно в случае фильтра).
Виталий Панасенко (2009-05-21 14:42:00) [12]А как у кверика может быть не подряд RecNo?
> В данном случае задейсвован TQuery. А с ним есть проблемы,
> используя данный метод. Полосатость может нарушиться.
>
И при чем тут индексация к кверику?
kyn66 (2009-05-21 12:42:00) [13]
> Нужно, чтобы было правильное значение RecordCount
Если быть точнее, то RecNoА он действительно иногда не правильно выстраивается. Замечено, что все траблы возникают, если включена индексация, т.е. записи выстроены по ключевому полю. А как это побороть - не знаю
Ega23 (2009-05-21 10:10:00) [14]
> Нужно, чтобы было правильное значение RecordCount
RecordCount - правильное. Нужно чтобы RecNo правильным быд. А это - не всегда. :)
Виталий Панасенко (2009-05-21 09:59:00) [15]2) и 3) как раз этому и способствуют
Виталий Панасенко (2009-05-21 09:58:00) [16]
> Александр из Перми (20.05.09 22:15) [8]
Нужно, чтобы было правильное значение RecordCount
Германн (2009-05-21 01:14:00) [17]
> Там полосатость делается совсем не так, если что.
Эт точно! Там полосатость делается ну очень совсем не так! Впрочем, так же "не так" как и в EhLib.
Единственно "нормальная" "полосатость" только тут
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=168
turbouser (2009-05-20 23:00:00) [18]
> Александр из Перми (20.05.09 22:46) [10]
>
>
> > 1: вариант 3) - самое то :)
>
> Серьезно или шутка?
Серьезно.
>
> А компоненты от Девэкспресс свободны от темы сабжа?
Эээммм.. Трудно связать тему сабжа ( :) ) с девекспресс, но телепатор
подсказывает, что свободны :) там полосатость делается совсем не так, если что.
Александр из Перми (2009-05-20 22:46:00) [19]
> 1: вариант 3) - самое то :)
Серьезно или шутка? (смайлик смущает, хочется однозначного ответа) А если записей много? Или Очень много? Это все кэшируется у клиента чтоле?
2: стоит узнать о IB/FB немного больше...
стоит узнать о IB/FB намного больше (нутром чюю, плаваю) Изучаю.
А компоненты от Девэкспресс свободны от темы сабжа?
turbouser (2009-05-20 22:20:00) [20]
> Александр из Перми (20.05.09 22:15) [8]
1: вариант 3) - самое то :)
2: стоит узнать о IB/FB немного больше...
3: Заместо EhLib надо использовать DevExpress, в качестве
альтернативы которого EhLib и создавался.