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

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

Автор: JohnSilver182
Дата сообщения: 03.05.2010 19:16
Кстати !!!
А если редактировать через cxGrid то как мне отловить ошибки при вставке ?????
А то компоненты доступа выводят чисто свою инфу . Юзеру непонятно однако !!

Автор: vladman
Дата сообщения: 03.05.2010 22:55
TechnoDreamer

Цитата:
Использую ExpressSkins Library и ExpressBars 6 (49 версия). ...
Мне надо, что иконки отображались все как нарисованы, а не только активная.

За отрисовку иконок при использовании скинов, в том числе, отвечает переменная dxBar.dxBarMakeInactiveImagesDingy. Присвоение ей значения False должно решить вашу проблему.
Автор: TechnoDreamer
Дата сообщения: 03.05.2010 23:13
vladman, вот спасибо так спасибо Видел эту переменную в хелпе в свое время, но не требовалось. Потом когда начал искать ее в свойствах вроде помнил, что такое есть, все свойства перерыл, а оно вот как получается
Автор: JohnSilver182
Дата сообщения: 04.05.2010 06:59

Код: А если редактировать через cxGrid то как мне отловить ошибки при вставке ?????
А то компоненты доступа выводят чисто свою инфу . Юзеру непонятно однако !!
Автор: crazypiggy
Дата сообщения: 04.05.2010 08:44
Добрый день, всех с наступающим праздником. Такой вопрос:
Есть таблица cxGrid
cxPlanSectorLevel cxPlanSectorDBTableView
cxPlanVolumeLevel cxPlanVolumeDBTableView
в нижней TableView по стролбцам подбиваются итоги. Можно ли как то эти итоги показать и вверхней TableView. Хотел сделать SQL запросом, но у меня итак запрос выполняется продолжительное время и если я ещё запросом буду получать сумму это будет уже долговато.
Автор: SIgor33
Дата сообщения: 04.05.2010 09:07
уважаемые кто нибудь делал экспорт из ExpressPrinting System не только в pdf интересует doc, rtf, jpg
Автор: Andryshok
Дата сообщения: 04.05.2010 09:43

Цитата:
Если вы о VCL компонентах, то пока нет таких. А где вы на сайет видели скин Office 2010? По-моему нет таких и для .Net Winform компонент.


На оффсайте вроде как пишут что есть, и скрины там есть, если бы даже для Net была dll_ка можно выдрать от туда шкуру и скомпилить для VCL, я так делал уже скин Asplant World
Автор: vladman
Дата сообщения: 04.05.2010 12:19
JohnSilver182

Цитата:
Ну то есть сабж делает где то у себя DATAController.DataSet.POST . А Компонент доступа ругается на своем языке .

Как раз POST и вызывается у вашего компонента доступа. Откуда DATAControllerу знать какие потом могут возникнуть исключения. Обрамите ваш DATAController.DataSet.POST в Try/except и в нем ругайтесь уже на понятном языке. А универсальнее будет написать один глобальный обработчик исключений для ваших компонент доступа в котором и будете на понятном языке сообщать пользователю суть ошибки.

Добавлено:
crazypiggy

Цитата:
в нижней TableView по стролбцам подбиваются итоги. Можно ли как то эти итоги показать и вверхней TableView.

Не совсем понятно что вы хотите реализовать, скрншот с пояснениями был бы более информативен.

Добавлено:
Andryshok

Цитата:
На оффсайте вроде как пишут что есть, и скрины там есть,

Так дайте ссылку где пишут и где есть.
Автор: JohnSilver182
Дата сообщения: 04.05.2010 12:30

Цитата:
Как раз POST и вызывается у вашего компонента доступа. Откуда DATAControllerу знать какие потом могут возникнуть исключения. Обрамите ваш DATAController.DataSet.POST в Try/except и в нем ругайтесь уже на понятном языке.


Во . А как найти где делатся "TcxGrid.DATAController.DataSet.POST" (кажется так) ??????

Ведь когда я жму у навигатора TcxGrid кнопочку вставить V . То где то в глубинах TcxGrid вызывается метод POST .
Автор: afiget
Дата сообщения: 04.05.2010 12:35
JohnSilver182
Я бы стал проверять данные на этапе ввода, если они могут измениться в течении этого времени (за что отдельно надавал бы по рукам пользователям).
В процессе сохранения удаленный Иванов даст ошибку. В этом случае (и любой другой ошибке) вы анализируете код ошибки и выводите понятное пользователю сообщение.
Например,

Код:
procedure TMyForm.ConnectionError(Sender: TObject; E: EDAError; var Fail: Boolean);
var ErrMessage: string;
begin
    Fail:=false; // потом false, чтобы не было двойного срабатывания
    case E.ErrorCode of
11: ErrMessage:='Нет связи с сервером!'+chr(13)+'Обратитесь к системному администратору.'+
chr(13)+
'Не используйте программу (можете ее закрыть) до устранения неполадок с сетью.'+
chr(13)+
'После устранения неполадок с сетью, пожалуйста, перезапустите программу.';
        515:
begin
ErrMessage:='Требуется непустое значение!'+chr(13)+chr(13)+'Код ошибки: '+
                 IntToStr(E.ErrorCode)+chr(13)+'Текст ошибки:'+chr(13)+E.Message;
if Con.InTransaction then // нужно еще показать строку с ошибкой
Fail:=true;
end;
        2627:
begin
ErrMessage:='Вводимое значение должно быть уникальным!'
// + chr(13)+chr(13)+'Код ошибки: '+
//                IntToStr(E.ErrorCode)+chr(13)+
//                'Текст ошибки:'+chr(13)+E.Message
;
Fail:=true;
end;
        else
begin
            ErrMessage:='Не могу завершить операцию!'+chr(13)+chr(13)+'Код ошибки: '+
                IntToStr(E.ErrorCode)+chr(13)+
                'Текст ошибки:'+chr(13)+E.Message;
Fail:=true;
end;
    end;
    Application.MessageBox(PAnsiChar(ErrMessage),PAnsiChar(Error), MB_OK+MB_ICONERROR);
// Logger.Error(ErrMessage);
end;
Автор: JohnSilver182
Дата сообщения: 04.05.2010 12:52
afiget нетт . Вот У меня для cxLookUpComboDox
А что то типа для cxGRID ??????????????????????????????????????????


Код:
procedure TFormChange.cxCB_SRPropertiesEditValueChanged(Sender: TObject);
begin

if not varisNull(cxCB_SR.EditValue ) then
begin
pFibDataset1.append
бла бла бла
try
pFibDataset1.POST;
except
вывод гугательста
pFibDataset1.CanselUpdate;
end;

end;

end;
Автор: crazypiggy
Дата сообщения: 04.05.2010 13:48
[img]

Uploaded with ImageShack.us
[/img] Вот рисунок того что мне нужно. Стрелками указаны ячейки в которые надо загрузить итоги второй вьюшки.
Автор: Man_Without_Face
Дата сообщения: 04.05.2010 14:03
Раньше в другой ветке задавал вопрос:

Цитата:
Может кто подскажет почему в Dll при рантайме не поддерживаются скины (DevExpress v48), в дезайн выставляю и все отлично меняется? В exe и там и там нормально.

На что получил ответ:

Цитата:
Нормальная работа VCL в dll без использования пакетов не гарантируется, об этом написано в справке. Обычно это приводит к возникновению самых странных и непредсказуемых глюков. Собственно поэтому вас тут так агитировали использовать пакеты. Но раз у вас разные версии делфи, и это не возможно, то остается только минимизировать использование VCL в библиотеке.

В шапке этой ветки есть ссылка на DLL со скинами, я ее скачал. Вопрос: можно ли как нибудь к моей DLL "приклеить" эту, чтобы у меня была поддержка скинов?

Автор: afiget
Дата сообщения: 04.05.2010 15:16
JohnSilver182
У меня там пропущено слово, полностью меняющее смысл совета
Я бы не стал проверять данные на этапе ввода (и не важно какой контрол для этого используется). А проверял бы при сохранении.
Я не пользуюсь компонентами доступа к Фаербёрду (Интербейсу), поэтому точного места указать не смогу.
Но смысл приведенного моего кода в том (выше уже писал vladman о централизованной обработке ошибок), что у вас есть код ошибки, который и нужно переводить в понятный пользователю текст.
При возникновении исключения проверяйте этот код. Если в данном локальном контексте исключения такой код не доступен, то спасет только централизованная обработка.
Кроме того, централизованная обработка позволяет написать код обработки ошибки в одном месте для всех случаев, что просто удобно.

crazypiggy
Дайте еще скриншот структуры вашего грида.
Автор: crazypiggy
Дата сообщения: 04.05.2010 16:06
[img] Uploaded with ImageShack.us[/img] Вот структура таблицы

Добавлено:
JohnSilver182
Посмотрите в примерах к FIBPlus компонентам. Там есть пример (извините за тавтологию) обработки ошибок. Создается чтото вроде репозитария ошибок и с ним происходит работа. Или, как Вам правильно советуют, сделайте централизованную обработку ошибок.

Добавлено:

Код:
procedure TFormChange.cxCB_SRPropertiesEditValueChanged(Sender: TObject);
begin

if not varisNull(cxCB_SR.EditValue ) then
begin
pFibDataset1.append
бла бла бла
try
pFibDataset1.POST;
except
вывод гугательста
pFibDataset1.CanselUpdate;
end;

end;

end;
Автор: V1s1ter
Дата сообщения: 04.05.2010 17:07
SIgor33

Цитата:
кто нибудь делал экспорт из ExpressPrinting System не только в pdf интересует doc, rtf, jpg

Еще не делал, но похоже буду делать (ориентировочно в июне), если произойдет сие событие могу поделится сырцами.
Автор: afiget
Дата сообщения: 04.05.2010 21:12
crazypiggy
Если эта форма используется только для вывода - попробуйте считать итоги в запросе. Так может быть быстрее, чем заставлять считать компьютер пользователя локально уже после получения данных.

Если нет,
View.DataController.Summary.FooterSummaryValues[ИндексКонкретного FooterSummaryItem]
вернет значение итога типа Variant.

Например, у меня есть универсальная функция для итогов, которая по имени поля возвращает значение итога:

Код:
function TBaseDocWithRows.SumAmount(const Parameters: array of variant): Variant;
var
FieldName: string;
i: integer;
begin
Result:=0;
if Length(Parameters) < 1 then
FieldName:= 'amount'
else
FieldName:= Parameters[0];
with View1.DataController.Summary do
begin
for i := 0 to FooterSummaryItems.Count - 1 do
if TcxGridDBTableSummaryItem(FooterSummaryItems[I]).Column = View1.GetColumnByFieldName(FieldName) then
begin
Result := FooterSummaryValues[I];
break;
end;
end;
end;
Автор: vladman
Дата сообщения: 05.05.2010 02:05
JohnSilver182
Если я не ошибаюсь, то вы используете в качестве компонентов доступа фибы. Поэтому, посмотрите в сторону TpFibErrorHandler и его обработчика события OnFIBErrorEvent. И опять же, если не ошибаюсь, это не является темой данной ветки.

Добавлено:
crazypiggy

Цитата:
Вот рисунок того что мне нужно. Стрелками указаны ячейки в которые надо загрузить итоги второй вьюшки.

Да, со скриншотом намного понятнее ваша задача. Оптимальным вариантом решения все же, на мой взгляд, является использование агрегатных функций и группирующего запроса для "верхнего" грида, если, конечно, ваша СУБД это поддерживает. Также посмотрите в сторону ExpressPivotGrid и его нововведения в v.2 TcxPivotGridDrillDownDataSet. Может эти компоненты помогут более универсально решить ваши задачи с построением всевозможных итогов и группирующих выборок.
Автор: SIgor33
Дата сообщения: 05.05.2010 08:12
V1s1ter

Цитата:
Еще не делал, но похоже буду делать (ориентировочно в июне), если произойдет сие событие могу поделится сырцами.

Буду премного благодарен!
Автор: struz
Дата сообщения: 05.05.2010 12:30
Добрый день.
Подскажите как создать в cxGridDBTableView столбец с кнопками не присваивая столбцу FieldName. Обработчик кнопок OnClick будет зависеть от выделеной строки.
Автор: X11
Дата сообщения: 05.05.2010 12:37
Просто не присваивай. В свойстве Properties выбери ButtonEdit
Автор: struz
Дата сообщения: 05.05.2010 12:55
Я изначально так и сделал... но в таблице они не отображаются... ячейка сама есть но кнопки в ней нет...
Автор: X11
Дата сообщения: 05.05.2010 13:05

Цитата:
ячейка сама есть но кнопки в ней нет...

Ну сразу бы так и спросил

Разверни свойство Options у колонки и обозри его. Найдёшь там ShowEditButtons
Автор: struz
Дата сообщения: 05.05.2010 13:31
Все нашел...
Огромное спасибо...
Автор: AKRAV
Дата сообщения: 05.05.2010 14:05
Ребята срочно нужна помочь спасайте кто может, нужны несколько длл-ок из девок версии 9.1.5.0
Если у кого-нибудь они установлены скиньте пожалуйста, эти файлы мне на akr.rka@gmail.com или выложите на любую шару и сслыку мне в личку.
DevExpress.XtraBars.v9.1.Design.dll
DevExpress.XtraEditors.v9.1.Design.dll
DevExpress.XtraGrid.v9.1.Design.dll
DevExpress.XtraLayout.v9.1.Design.dll

Срочно нужно подправить проект в дезайнтайме, а этих нету.
Заранее огромное спасибо.
Автор: SIgor33
Дата сообщения: 05.05.2010 14:16
Когда открывают Detail View у главной таблицы так и остается активной запись на которой была активна а детал открыт у другой хотехось чтобы позиционировалась на ту запись чей детал открыт в данный момент. Помогите.
Автор: mdid
Дата сообщения: 05.05.2010 16:24
драсте...есть некий журнал документов..в этом журнале есть одинаковое значение полей..
хотелось бы без дополнительного запроса выбрать в cxDBLookupComboBox уникальные значения этого поля...возможно?
Автор: volser
Дата сообщения: 05.05.2010 17:01
mdid
А смысл? Попробуйте через таблицу в памяти.
Автор: vladman
Дата сообщения: 06.05.2010 01:29
SIgor33

Цитата:
Когда открывают Detail View у главной таблицы так и остается активной запись на которой была активна а детал открыт у другой хотехось чтобы позиционировалась на ту запись чей детал открыт в данный момент.

Во-первых, в общем случае, одновременно может быть открыто несколько дитейлов. Если вы имели ввиду, что необходимо позиционироваться на "только что открытый дитейл", то попробуйте обработать событие DataController.onDetailExpanded вашего MasterView, поместив в него следующий код:

Код: ADataController.FocusedRecordIndex := ARecordIndex;
Автор: mdid
Дата сообщения: 06.05.2010 08:09
vladman
пасиб...как то так..просто думал может есть встроенный фильтр иль что то такое

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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