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

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

Автор: volser
Дата сообщения: 19.10.2009 19:13
vladman
А зачем так сложно если можно просто запретить редактировать в событии OnEditing?
Автор: vladman
Дата сообщения: 19.10.2009 19:39
volser

Цитата:
А зачем так сложно если можно просто запретить редактировать в событии OnEditing?

Согласен, вы правы! Мы же - не ищем легких путей .
Забыл, что в обработчике события OnEditing есть возможность запретить редактирование для ячейки.
В таком случае Walerik75, вот еще один (самый простой) вариант решения вашей проблемы предложенный volser

Код: procedure <YourForm>.<YourcxGridTableView>Editing(Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem; var AAllow: Boolean);
begin
AAllow := not VarIsNull(Sender.DataController.Values[Sender.DataController.FocusedRecordIndex, AItem.Index]);
end;
Автор: Walerik75
Дата сообщения: 19.10.2009 23:15
volser
vladman
Спасибо!
Смотрел не в ту сторону: OnCellClick.

В принципе подходят оба варианта. В гриде колонки создаются динамически и при создании назначаются и Properties и события...


Код: ...
            ((TcxPopupEditProperties*)column->Properties)->PopupControl = cxGrid1;
            ((TcxPopupEditProperties*)column->Properties)->AutoSelect = false;
            ((TcxPopupEditProperties*)column->Properties)->ImmediatePopup = false;
            ((TcxPopupEditProperties*)column->Properties)->OnInitPopup = gSetkaChasTableViewGROUPPropertiesInitPopup;
            ((TcxPopupEditProperties*)column->Properties)->PopupSysPanelStyle = true;
            ((TcxPopupEditProperties*)column->Properties)->OnCloseUp = gSetkaChasTableViewGROUPPropertiesCloseUp;
...
Автор: Kmich
Дата сообщения: 20.10.2009 06:03
Всем привет. Сегодня косячок у себя в программе нашел (использую cxGrid (cxDBTableView) в связке с TOraQuery из Odac 6.9.). который заключается в следующем, при вставке из буфера обмена строки или числа это значение не сохраняется при переходе на следующую строку или при нажатии на Enter. Скорее всего это косяк со стороны cxGrid. Так как сегодня проверил на девках 42 версии то все нормально работает а на 46 эта ошибка проявляется. Может кто знает как лечить или может это только у меня так глючит?
Автор: mdid
Дата сообщения: 20.10.2009 10:12
чет или лыжи не едут или как обычно...подскажите плз как в cxGrid получить сумму колонки...тоесть есть ли метод возвращающий итог по колонке?
Автор: f3ka
Дата сообщения: 20.10.2009 10:15
mdid
скорее всего придется обрабатывать события связанные с Summary или попытаться вытащить эти Summary из DataControllera. методов вроде бы нет...
Автор: mdid
Дата сообщения: 20.10.2009 10:32
проще наверно пересчитывать сумму по тебуемым колонкам после события добавления новой записи...блин вроде и элементарная задача а DEV проспал это дело
Автор: f3ka
Дата сообщения: 20.10.2009 10:39
mdid
все таки я настоятельно советую изучить TcxSummaryItem в хелпе... думаю что проблема решаема средствами DevExpress
Автор: Walerik75
Дата сообщения: 20.10.2009 11:43
mdid
В событии OnAfterSummary можно выдернуть значения
Вот код, в котором я переписываю свои значения (у меня там строковые значения) в футер группы и футер всей таблицы.

Код:
void __fastcall TUchPlanSodF::gSetkaTableViewDataControllerSummaryAfterSummary(TcxDataSummary *ASender)
{
    TcxDataControllerGroups* AGroups = ASender->DataController->Groups;
    TcxGridTableSummaryItem* GItem;

    TcxGridTableSummaryItem* AItem;
    TcxGridDBBandedColumn* GC;
    UnicodeString FieldName;

    int gc = ASender->GroupSummaryItems[0]->Count;
    int sc = ASender->FooterSummaryItems->Count;

    UnicodeString TempStr;

    if((gc<4)||(sqlUchPlanLeft->RecordCount==0))
        return;

// заполнение футера группы
    for(int i=0; i<AGroups->ChildCount[-1]; i++)
    {
        ...
        for(int g=3; g<gc; g++)
        {
            GItem = (TcxGridTableSummaryItem*)ASender->GroupSummaryItems[0]->Items[g];
            GC = (TcxGridDBBandedColumn*)GItem->Column;
            FieldName = GC->DataBinding->FieldName;
            ...
            ASender->GroupSummaryValues[AGroups->ChildDataGroupIndex[-1][i]][g] = TempStr;
            ...
        }
    }

// заполнение итогового футера
    for(int i=2; i<sc; i++)
    {
        AItem = (TcxGridTableSummaryItem*)ASender->FooterSummaryItems->Items[i];
        GC = (TcxGridDBBandedColumn*)AItem->Column;
        FieldName = GC->DataBinding->FieldName;
        ...
        ASender->FooterSummaryValues[i] = TempStr;
        ...
    }

}
Автор: vladman
Дата сообщения: 20.10.2009 13:14
mdid

Цитата:
подскажите плз как в cxGrid получить сумму колонки

В футер саммари создаем новый айтем. В этом айтеме свойства
Column - оставляем nil.
FieldName - ваше поле, сумму которого вы хотите получить (<YourcxGridDBTableViewSummColumn> в примере)
Kind - skSum.
Получаем значение этого айтема так

Код: var
vIndex: integer;
vValue: variant;
begin
with <YourcxGridDBTableView>.DataController.Summary do
begin
vIndex := FooterSummaryItems.IndexOfItemLink(<YourcxGridDBTableViewSummColumn>);
vValue := FooterSummaryValues[vIndex]
end;
end
Автор: mdid
Дата сообщения: 20.10.2009 13:19
vladman
о пасиб...ща попробую...
Walerik75
слишком геморно и вряд ли отличается от цикла перебора полей
Автор: vladman
Дата сообщения: 20.10.2009 18:18
mdid

Цитата:
ща попробую...

Уточнение. Я вас немного дезинформировал, пытаясь сделать код уневерсальным. Конструкция вида
FooterSummaryItems.IndexOfItemLink(<YourcxGridDBTableViewSummColumn>);
работает лишь в том случае, если свойство Column созданного айтема - содержит ссылку на <YourcxGridDBTableViewSummColumn> и, конечно же не работает, если это свойство не установлено, т.е. nil.
В вашем случае есть три решения, зависящие от того, хотите или нет чтобы это саммари отображалось в <YourcxGridDBTableView>.
При отображаемом самммари:
1. самое простое - установить свойство созданного айтема Column = <YourcxGridDBTableViewSummColumn>, и также установить свойство OptionView.Footer = True вашей <YourcxGridDBTableView>.
При срытом самммари:
2. установить свойство созданного айтема Column = <YourcxGridDBTableViewSummColumn>, и также установить свойство OptionView.Footer = False вашей <YourcxGridDBTableView>.
3. установить свойство созданного айтема Column = nil, свойство OptionView.Footer вашей <YourcxGridDBTableView> в таком случае значения не имеет, но доступ к значению саммари нужно реализовать немного по-другому: vValue := <YourcxGridDBTableView>.DataController.Summary.FooterSummaryValues[0];
Автор: Walerik75
Дата сообщения: 20.10.2009 20:09

Цитата:
Walerik75
слишком геморно и вряд ли отличается от цикла перебора полей

Дык у меня там и есть прямой перебор для занесения данных. Это просто пример где и как можно выдернуть нужные значения.
А по сути vladman написал тот же пример, только для конкретного поля.


Цитата:
vValue := <YourcxGridDBTableView>.DataController.Summary.FooterSummaryValues[0];



Цитата:
void __fastcall
TUchPlanSodF::gSetkaTableViewDataControllerSummaryAfterSummary(TcxDataSummary *ASender)
{
...
TempVal = ASender->FooterSummaryValues[0];
...
}

Автор: neznayka3
Дата сообщения: 21.10.2009 09:34
кинул на docksite несколько dockpanel-ей. как заставить, чтобы они скрывались (AutoHide) в нужную мне сторону?
Автор: AlexPetrovich
Дата сообщения: 21.10.2009 11:44
Kmich

Это баг в Девках v46:
http://www.devexpress.com/Support/Center/p/B150155.aspx

Исправление под ковриком #
Автор: zzz78
Дата сообщения: 21.10.2009 11:53
Возможно ли отфильтровать грид по суммам в группах?
Например после группировки видим на 1 верхнем уровне:
Рога и копыта (Sum=9000)
Вася и Ко (Sum=0)
Петя и Ко (Sum=250)

Нужно теперь выкинуть отсюда всех у кого Sum<=0
Реально ли и как?
Автор: vladman
Дата сообщения: 21.10.2009 13:36
neznayka3

Цитата:
кинул на docksite несколько dockpanel-ей. как заставить, чтобы они скрывались (AutoHide) в нужную мне сторону?

Note that by default, dock controls are hidden at the nearest dock site's edge. Thus, if a control is docked to the right edge of a dock site, it will be hidden at the right edge. If a dock control fills the entire area supplied, the edge where it will be hidden is determined taking into account its dimensions and position. However, you can manually specify the edge where to hide the control. For this purpose, handle the control's OnGetAutoHidePosition event.
Подробнее - ms-help://borland.bds5/ExpressDockingLibrary.BDS5/ExpressDockingLibrary/IDH_Concepts_AutoHideFeature.htm
Автор: vladman
Дата сообщения: 22.10.2009 13:05
zzz78

Цитата:
Возможно ли отфильтровать грид по суммам в группах?

Смотрите здесь: Filter grid based on group summary value
Автор: neznayka3
Дата сообщения: 23.10.2009 09:40
Как сделать, чтоб TabContainerDocksite при сворачивании вниз уходил бы только под центральную панель?
Автор: vladman
Дата сообщения: 23.10.2009 12:08
neznayka3

Цитата:
Как сделать, чтоб TabContainerDocksite при сворачивании вниз уходил бы только под центральную панель?

Скорее всего никак, по крайней мере мне решение не известно. Если найдете способ, обязательно поделитесь.
Автор: zzz78
Дата сообщения: 23.10.2009 14:30

Цитата:
zzz78
Цитата:
Возможно ли отфильтровать грид по суммам в группах?
Смотрите здесь: Filter grid based on group summary value


Там предлагают на SQL реализовывать это... Но у меня группировки могут меняться, отчет динамический, то хотят в одном разрезе поглядеть то в другом. Соответственно суммы в группировках меняются. Вот если б можно было после суммирования наложить фильтр...
Автор: vladman
Дата сообщения: 23.10.2009 14:49
zzz78

Цитата:
Там предлагают на SQL реализовывать это...

Предлагают реализовать на SQL так как "the ExpressQuantumGrid doesn't support this functionality", т.е. ExpressQuantumGrid не поддерживает такой функциональности.
Если это вы используете как представление для отчета, посмотрите в сторону PivotGrid, который как раз и служит для построения различного рода группировок и разрезов.
Автор: Sufferer
Дата сообщения: 24.10.2009 11:23
Первый вопрос наврное к модератору. Ссылочки на 1 и 2 части топика идентичны.
http://forum.ru-board.com/topic.cgi?forum=33&topic=2214&start=1980#lt
Куда замылили одну из частей?

Как собственно установить качество сжатия для Jpeg при сохранении методом SaveToFile из TcxDBImage ?
Автор: vladman
Дата сообщения: 24.10.2009 13:54
Sufferer

Цитата:
Ссылочки на 1 и 2 части топика идентичны

Поправил.

Цитата:
Как собственно установить качество сжатия для Jpeg при сохранении методом SaveToFile из TcxDBImage ?


Код: uses
jpeg

procedure <YourForm>.<SaveToFile>Click(Sender: TObject);
begin
TJPEGImage(<YourcxDBImage>.Picture.Graphic).CompressionQuality := <YourCompressionQualityValue>;
TJPEGImage(<YourcxDBImage>.Picture.Graphic).Compress;

<YourcxDBImage>.SaveToFile;
end;
Автор: Sufferer
Дата сообщения: 24.10.2009 15:56
Ай спасибо, а я не догадался приведенее типов сделать.
Автор: clear2121
Дата сообщения: 25.10.2009 07:46
Привет всем!
Столкнулся со странностями в Девках! У меня - Вынь7 и С++ Билдер 2007. Ставлю 46 девок. А там нет ExpressQuantumTreeList 5 для С11. Я в шоке. Кое как нашёл сырцов в инете - и там нету. Поставил 45х девок - И ТАМ нет. Главное для D11 есть, а для С11 нет. Если ставить через китайского автоинсталлера, то всё нормально, но тогда среда потом не компилит PAS файлы. Вообщем, ПОМОГИТЕ, ГОРЮ. Можно из С12 сделать С11?
Автор: vladman
Дата сообщения: 25.10.2009 12:32
clear2121

Цитата:
У меня - Вынь7 и С++ Билдер 2007. Ставлю 46 девок. А там нет ExpressQuantumTreeList 5 для С11

Не знаю поможет это вам или нет, но информация касательно C++Builder 2007 и QuantumTreeList version 5 следующая:
Question Details: Will version 5 support C++Builder 2007?
Автор: clear2121
Дата сообщения: 25.10.2009 12:41
vladman, спасибо!
Теперь думаю, что делать. Meister Floh советует попробовать "откомпилить дельфинарный проект с опцией генерировать все для С++". Но у меня не установлен Делфи.
Может есть какие идеи?
СПАСИБО!
Автор: vladman
Дата сообщения: 25.10.2009 12:56
clear2121

Цитата:
Может есть какие идеи?

Ну раз сказали что не будет поддерживаться, значит на то есть причины. Мое мнение - не вижу особой надобности создавать себе дополнительные трудности на ровном месте. Эта ситуация может быть хорошим стимулом для перехода на официально поддерживаемые версии C++Builder.
Автор: neznayka3
Дата сообщения: 26.10.2009 11:53
подскажите как программно свернуть DockPanel, которая развернута. hide вообще ее скрывает.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

Предыдущая тема: Delphi: tcp клиент в потоке


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