Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Использование DevExpress (часть 4)

Автор: dimm78
Дата сообщения: 13.08.2015 10:19
asutp2

Цитата:
Свойство Options.SortByDisplayText := isbtOff

Не совсем понял где ты это нашел. У меня тоже девки 2014.2, но сортировка по DisplayText отключается через <MyGrid>.<MyView>.DataController.Options.dcoSortByDisplayText := False

P.S. Дошло, это ты об Options колонки. У меня выставлено isbtDefault при отключенной опции cxView и даты сортируются как положено
Автор: asutp2
Дата сообщения: 13.08.2015 11:15
<MyGrid>.<MyView>.DataController.Options.dcoSortByDisplayText := False

это тоже установлено, но не помогает.

Добавлено:
В общем путем отладки выяснил, что данные внутри DataController почему то хранятся в виде string, а не TDateTime.

В итоге решил сделать сравнение самостоятельно, вот рабочий код для XE7:

procedure TFormMain.GridInvoicesTableViewDataControllerCompare(
ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2, AItemIndex: Integer;
const V1, V2: Variant; var Compare: Integer);
var
IntlValue1: string;
IntlValue2: string;
IntlDate1: TDateTime;
IntlDate2: TDateTime;
IntlData: TVarData;
// конвертация строки в формате 'dd.mm.yyyy' в дату
function ConvertStringtoDate(const AValue: string): TDateTime;
begin
// результат
Result := EncodeDate(
StrToInt(Trim(Copy(AValue, 7, 4))),
StrToInt(Trim(Copy(AValue, 4, 2))),
StrToInt(Trim(Copy(AValue, 1, 2)))
);
end;
begin
// поле типа "дата"?
if AItemIndex = GridInvoicesTableViewColumnCreated.Index then
begin
// поле типа "дата"
// значения даты в текстовом виде
IntlValue1 := ADataController.Values[ARecordIndex1, AItemIndex];
IntlValue2 := ADataController.Values[ARecordIndex2, AItemIndex];
// значения даты в числовом виде
IntlDate1 := ConvertStringtoDate(IntlValue1);
IntlDate2 := ConvertStringtoDate(IntlValue2);
// сравниваем
Compare := IfThen(
Trunc(IntlDate1) > Trunc(IntlDate2),
1,
IfThen(
Trunc(IntlDate1) < Trunc(IntlDate2),
-1,
0
)
);
end
else
begin
// поля иного типа, сравниваем стандартным способом
case VarCompareValue(V1, V2) of
vrEqual:
// равны
Compare := 0;
vrLessThan:
// первый параметр меньше
Compare := -1;
vrGreaterThan:
// первый параметр больше
Compare := 1;
vrNotEqual:
begin
// один из параметров пустой, другой не пустой
// данные первого параметра
IntlData := FindVarData(V1)^;
// первый параметр пустой?
if IntlData.VType = varEmpty then
// первый параметр пустой, значит первый параметр меньше второго
Compare := -1
else
// первый параметр не пустой, значит пустой второй и первый больше
Compare := 1;
end;
end;
end;
end;
Автор: Cryogen2003
Дата сообщения: 13.08.2015 12:25
asutp2
данные там хранятся из датасурса, который подключен. Копайте в сторону datasource и dataset, который подключили к гриду.
Автор: asutp2
Дата сообщения: 13.08.2015 12:42
Cryogen2003
в cxGrid я добавил TcxGridTableView. Заполнение данных в таблице соответственно осуществляю через <MyView>.DataController.Values (заношу данные вручную для каждой колонки и строки, т.е. например <MyView>.DataController.Values[<row>, <col>] := <TDateTime>). И datasource и dataset к гриду не подключал
Автор: dimm78
Дата сообщения: 13.08.2015 13:31
asutp2

Цитата:
в cxGrid я добавил TcxGridTableView. Заполнение данных в таблице соответственно осуществляю через <MyView>.DataController.Values (заношу данные вручную для каждой колонки и строки, т.е. например <MyView>.DataController.Values[<row>, <col>] := <TDateTime>). И datasource и dataset к гриду не подключал

Ну так надо уточнять такие вещи когда вопрос задаешь!))) В случае если ты используешь cxView в Unbound режиме (т.е. заполняешь DataController вручную), то для колонок нужно принудительно выставлять DataBinding.DataType т.к. по умолчанию для всех колонок там указывается тип String. Выбери DateTime и будет тебе счастье!)))
Автор: Cryogen2003
Дата сообщения: 13.08.2015 14:09
asutp2
Дык а чего сразу то не сказал, быстрее бы сообразили. Я думал у тебя проблема именно с DataSource, думал так же как и у меня проблема с даками. А оказывается ты просто unbound режиме все заполняешь. Делай тогда как dimm78 говорит
Автор: asutp2
Дата сообщения: 13.08.2015 17:55
во, то что и было нужно, спасибо!
Автор: Chukotka
Дата сообщения: 08.09.2015 11:29
dxDockingManager - кинул несколько панелей. Пара пристыкована к форме, пара просто Floating.
Проблема в том, что когда открываю форму - floating-панели видны, но только когда форма в режиме просмотра кода. Как только переключаю на дизайнер, floating-панели исчезают.
Кто в курсе, каким макаром я могу эти панели пристыковать к форме?
Автор: StredaX
Дата сообщения: 10.09.2015 13:06
Chukotka,
TdxDockSite?
Автор: Chukotka
Дата сообщения: 10.09.2015 13:25
StredaX

Цитата:
TdxDockSite?

Да. Решил дело кардинально - удалил сначала *.dproj\*.local\*.identcache\*.dsk, потом загрузил проект, удалил и заново создал все панели. Иначе ничего не получалось.
Автор: TTA
Дата сообщения: 15.09.2015 09:36
народ у кого есть опыт работы с их mvc компонентами? Сильно тормозные или можно юзать?
Автор: ChSerg
Дата сообщения: 15.09.2015 12:23
TTA
Это VCL-ветка. Вам в .NET-овскую...
Автор: TTA
Дата сообщения: 16.09.2015 10:04
ChSerg
по "DevExpress" судя по поиску это единственная ветка тут. да и не написано тут нигде что только VCL. В разделе ".net" последнее упоминание в 2013 году)
Автор: KDPoid
Дата сообщения: 16.09.2015 13:58
TcxTreeList
Некоторое время назад захотелось свою сортировку.
Написал обработчик onCompare
Всё было отлично, пока не понадобилось редактировать одну из нескольких одинаковых строк.
Как только начинается редактирование - строки переставляются. Заканчивается редактирование - переставляются обратно.
Хрень возникает только на одинаковых строках, для которых мой обработчик возвращает 0 в aCompare.

Я бы всё свалил на кривой алгоритм сортировки, который при каждом упорядочивании меняет порядок одинаковых элементов.
Но если совсем убрать обработчик с onCompare - прыжков одинаковых элементов не происходит...

Может это как-то лечится парой ласковых операторов ?
Автор: dred2k
Дата сообщения: 16.09.2015 14:53
KDPoid
Предположу возможность проверки, что лист находится в режиме редактирования (у вертикального грида, к примеру, есть такое, так что скорее всего и тут).
Ничего не делай при этом в обработчике сравнения - может помочь.
Автор: KDPoid
Дата сообщения: 16.09.2015 15:17
В начале обработчика добавил:
if cxTreeList.IsEditing then Exit;

Стало существенно хуже
Как только вхожу в режим редактирования, мой обработчик перестаёт работать и всё сортируется по дефолту - строки прыгают.
Заканчивается редактирование, всё сортируется по моему - строчки прыгают...
Раньше прыгали только одинаковые строчки, а теперь всё колбасится не по детски...

Надо попробовать в функции сравнения задействовать номер строки. Чтобы при абсолютно равных значениях полей, меньшей считалась та строчка, которая расположена выше...
Автор: KDPoid
Дата сообщения: 16.09.2015 21:32
Действительно...

помогло в конце обработчика добавить:

Код:
if ACompare=0 then
ACompare := Sign(aNode2.VisibleIndex - aNode1.VisibleIndex);
Автор: mcdie
Дата сообщения: 18.09.2015 10:16
Может кто подскажет.
как в TcxTreeList (TcxDBTreeList) лучше всего организовать поиск значений в большом дереве.
Автор: X11
Дата сообщения: 18.09.2015 10:42
а что, долго ищет?
beginupdate используешь?
Автор: KDPoid
Дата сообщения: 18.09.2015 13:24
mcdie
А cxTreeList.FindNodeByText() не катит ? Почему ?

Кмк, поиск для TcxTreeList и для TcxDBTreeList - это две большие разницы, как говорят у них в Одессе.
Поиск всё таки по датасету или по другим данным ?

"Большое дерево " - это сколько ? 100 нод ? 10000 ? 9000000 ?
Автор: mcdie
Дата сообщения: 18.09.2015 13:47
X11
спасибо. Вопрос по поиску снят. Разобрался.

Вопрос другой. А можно ли сделать в TcxTreeList фильтрацию, чтобы не терялась структура дерева. Вроде в гриде есть, а тут нету. Какой нибудь ручной способ фильтрации возможно реализовать?
Автор: X11
Дата сообщения: 18.09.2015 14:00
погугли, ты не первый
но встроенное нету

один раз я отказался от дерева и создал дерево на базе cxGrid -весьма удобно получается
Автор: VadimLou
Дата сообщения: 18.09.2015 17:59

Цитата:
сделать в TcxTreeList фильтрацию, чтобы не терялась структура дерева

Явно скорее всего никак. Неявно (аналог как в старом браузере Opera) - можно.
Размещаешь под нужным деревом второе такое же , но пустое. При фильтрации - просто строишь новое дерево и переключаешь видимость. Зато в способе фильтрации нет ограничений: регулярка, маски, невидимые поля(колонки), всякие служебные префиксы...
Автор: mcdie
Дата сообщения: 21.09.2015 08:15
VadimLou
Интересный трюк, сам не догадался. Спасибо.
Автор: G787
Дата сообщения: 21.09.2015 22:18
А кто нить уже портировал 14.2.8 под DX 10 ? можете опытом поделится ?
Невыносимо было ожидать, запилил сам.

Чтоб девки ставились под DX 10 при помощи DXAutoInstallera.
а, пароль как любит говорить сфинкс в русской раскладке.
#
Автор: mcdie
Дата сообщения: 23.09.2015 10:41
Кто нибудь делал групповую функцию "Количество разных" в гриде?
Есть событие DataController.Summary.FooterSummaryItems.OnSummary где можно как то посчитать, но пока неполучается. Может кто нибудь уже реализовывал подобное?
Автор: dimm78
Дата сообщения: 23.09.2015 13:10
mcdie
Можешь попробовать эти варианты (разница только в используемых событиях)
_https://www.devexpress.com/Support/Center/Question/Details/A909
_https://www.devexpress.com/Support/Center/Question/Details/A217
Автор: mcdie
Дата сообщения: 25.09.2015 08:57
dimm78
Спасибо. Довольно старые ссылки, одна даже по моему по старой версии грида.
Автор: dimm78
Дата сообщения: 25.09.2015 10:26
mcdie


Цитата:
Спасибо. Довольно старые ссылки, одна даже по моему по старой версии грида.


Ну так ничего новее они пока не придумали)
Автор: almagest
Дата сообщения: 01.10.2015 08:56
Здравствуйте!
Решил попробовать devexpress. Установил из исходников 14.2.2 на XE8. В cxImageList в дизайн-тайм есть пункт "Load from Devexpress Icon Library", но там пусто - никаких иконок нет. Сами иконки, как я понял, лежат в devexpress\source\Icon Library\ - где этот путь прописать, чтобы иконки были видны?
Спасибо!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.