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

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

Автор: f3ka
Дата сообщения: 29.12.2009 11:09
OwnerZ
поиск по Knowledge Base дал следующий результат:

Код: with <YourRow>.Properties do
if not VarIsEmpty(Value) then
AText := (EditProperties as TcxLookupComboBoxProperties).GetDisplayText(Value, True, True)
else
AText := EmptyStr;
Автор: OwnerZ
Дата сообщения: 29.12.2009 11:22

f3ka


Цитата:
OwnerZ
поиск по Knowledge Base дал следующий результат:

Код:
with <YourRow>.Properties do
if not VarIsEmpty(Value) then
AText := (EditProperties as TcxLookupComboBoxProperties).GetDisplayText(Value, True, True)
else
AText := EmptyStr;



ОГРОМНОЕ СПАСИБО. ЭТО то что нужно.

Подскажите а в Knowledge Base случайно нет ответа на вопрос




Добавлено:
как проверить запись на предмет какой компонент стоит в
EditProperties

TcxLookupComboBoxProperties

или TcxCustomEditTextProperties.

спасибо
Автор: f3ka
Дата сообщения: 29.12.2009 11:38
OwnerZ
ну а если просто попробовать по аналогии с предыдущим ответом

Код: if <YourRow>.Properties.EditProperties is TcxLookupComboBoxProperties then
...
Автор: X11
Дата сообщения: 29.12.2009 11:38
Проблема с редактированием выделенных записей в cxGrid`е.
Грид привязан к fibDataset.
Вручную записи добавляются и корректируются непосредственно через сам грид.

Вот код

Код:
procedure TfmPrava.MenuItem1Click(Sender: TObject);
Var
i: integer;
ARowIndex: Integer;
ARowInfo: TcxRowInfo;
begin
fmMoveUser := TfmMoveUser.Create(self);
try
if fmMoveUser.ShowModal = mrOk then
with dbgUsers.dataController do
begin
beginupdate;
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(ARowIndex);
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin
Edit;
Values[ARowInfo.RecordIndex, dbgUsersID_GROUP.Index] := fmMoveUser.dbgGroups.DataController.Values[fmMoveUser.dbgGroups.DataController.FocusedRecordIndex, fmMoveUser.dbgGroupsID.Index];
Post(true);

end;
end;//for
finally
EndUpdate;
end;
end;//with
finally
FreeAndNil(fmMoveUser);
dbgUsers.DataController.DataSet.Close;
dbgUsers.DataController.DataSet.open;
end;
end;
Автор: OwnerZ
Дата сообщения: 29.12.2009 11:46
f3ka


Упс действительно.

СПАСИБО за ПОМОЩЬ. С Наступающим 2010.
Автор: f3ka
Дата сообщения: 29.12.2009 11:56
X11
в хелпе написано

Цитата:
Note: Do not call the Append, Insert, Post, SetEditValue, and FindRecordIndexByText methods within the BeginUpdate/EndUpdate and BeginFullUpdate/EndFullUpdate blocks.
Автор: asi81
Дата сообщения: 29.12.2009 11:58
Добрый день!
Извините что баян, но времени все меньше чтобы искать в ручную. Потратил уже время но сам не нашел . Хочу быстро натянуть на приложение кристмас скин. Кидаю на главную форму скин контролер - включаю скин - в дизайнере все пучком - красивые иконки, синии цвета и тд. Но в рантайме скина нет ни на одном контроле.
На другом приложении сделал все тоже самое - там скин натянулся на все контролы кроме меню и попап меню(все что наTdxBarManager). Причем в дизайнере все натянуто!!
Автор: X11
Дата сообщения: 29.12.2009 12:03

Код:
procedure TfmPrava.MenuItem1Click(Sender: TObject);
Var
i: integer;
ARowIndex: Integer;
ARowInfo: TcxRowInfo;
begin
fmMoveUser := TfmMoveUser.Create(self);
try
if fmMoveUser.ShowModal = mrOk then
with dbgUsers.dataController do
begin
// beginupdate;
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(ARowIndex);
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin
Edit;
Values[ARowInfo.RecordIndex, dbgUsersID_GROUP.Index] := fmMoveUser.dbgGroups.DataController.Values[fmMoveUser.dbgGroups.DataController.FocusedRecordIndex, fmMoveUser.dbgGroupsID.Index];
Post(true);
end;
end;//for
finally
// EndUpdate;
end;
end;//with
finally
FreeAndNil(fmMoveUser);
dbgUsers.DataController.DataSet.Close;
dbgUsers.DataController.DataSet.open;
end;
end;
Автор: vladman
Дата сообщения: 29.12.2009 12:03
X11

Цитата:
Почему вообще никаких изменений не происходит. Хотя код изменения

Неверно изменять значения в DataSet изменяя свойство DataController.Values. При таком подходе изменятся ТОЛЬКО значения DataController'а, и, эти изменения, потеряются при следующем рефреше DataSet'а, что собственно у вас и происходит.
Автор: X11
Дата сообщения: 29.12.2009 12:07

Код:
procedure TfmPrava.fibdsUsersBeforePost(DataSet: TDataSet);
begin
ShowMessage(DataSet.FieldByName('ID_GROUP').AsString);

Автор: vladman
Дата сообщения: 29.12.2009 12:20

Цитата:
Тогда сделал через датасет. Но очень хочется реализовать через cxGrid

Думаю проще будет через DataSet. Как вариант, можно сохранить значения ключевого/вых полей в StringList, а затем создать и выполнить update запросы (желательно в одной транзакции) для изменения данных в этих записях (что быстрее), либо локейтиться по DataSet согласно сохраненным значениям и затем используя методы DataSet'а Edit, Post осуществлять необходимые изменения (что, конечно, медленнее).
Автор: JohnSilver182
Дата сообщения: 29.12.2009 12:37
А в CxGriD можно какое нибудь фичу использовать нестандартно , что бы выводить рядом с данными , над данными примечание (типа : Данные редактирует Иванов ) . Что бы компоненты не плодить , лишние LAbel не кидать .
Автор: f3ka
Дата сообщения: 29.12.2009 12:57
JohnSilver182
мне кажется, что такое можно делать когда есть реальное понимание откуда будут данные о редактировании браться, если на уровне SQL запроса, тогда можно просто обрабатывать OnShowHint или OnGetStyle, и там красить или выводить подсказку, но данные должны быть заранее получены... если же возможности получать такие данные невозможно получить при помощи SQL запроса, тогда надо пытаться поиметь (придумать) технологию получения информации о событиях с сервера СУБД...
Автор: vladman
Дата сообщения: 29.12.2009 13:38
X11

Цитата:
Вспомнил, я уже сталкивался с такой проблемой
редактирование записей в cxGrid

Вдогонку - Example: Changing selected records in bound mode
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TExample_Changing_selected_records_in_bound_mode.htm


Добавлено:
asi81

Цитата:
На другом приложении сделал все тоже самое - там скин натянулся на все контролы кроме меню и попап меню(все что наTdxBarManager). Причем в дизайнере все натянуто!!

Буквально сегодня уже это обсуждали. Вернитесь в начало предыдущей страницы.
Автор: X11
Дата сообщения: 29.12.2009 16:04

Цитата:
Вдогонку - Example: Changing selected records in bound mode
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TExample_Changing_selected_records_in_bound_mode.htm

Вот не могу вразумить, почему программисты не могут или не хотят реализовать нормальную поддержку изменений выделенных записей , такая мощА и тут на тебе... изобретай велосипед.
Автор: crazypiggy
Дата сообщения: 29.12.2009 16:06

Код:
procedure TForm1.cxDBTreeList1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := Sender = Source;
end;
Автор: asi81
Дата сообщения: 29.12.2009 17:11
vladman
Все что написано в начале пред. страницы мне не помогает, есля я правильно понимаю. Я все настроил как надо - и Style - bmsUseLookAndFeel и Native Style == false и даже SkinName указал. И на дизайн странице все пучком отображается - на Тулбарах все натянуто - но запускаю прогу - и облом, везде скины натянуты, на тулбарах нет.
Автор: vladman
Дата сообщения: 29.12.2009 17:34
crazypiggy

Цитата:
Этот код вроде не работает. Как же все таки работате этот Drag&Drop в cxDBTreeList?

Здесь, Implementing Drag-And-Drop Functionality -
ms-help://borland.bds5/ExpressQuantumTreeList5.BDS5/ExpressQuantumTreeList5/IDH_tbh_Implementing_the_Drag_And_Drop_Functionality.htm
подробно все описано.

Если вкратце, то нужно сделать следующее
1. DragMode := dmAutomatic.
2. Создать пустой обработчик OnDragOver. (ну или так, как вам советовал volser)
3. Установить OptionsData.AutoCalcKeyValue = True; для того чтобы обеспечить автоматическое изменение значения ключевого поля.

Реализация Drag&Drop не зависит от способа доступа к данным, т.е. нет разницы BDE или Fibы.

Добавлено:
asi81
давайте пример, с исходинками - так быстрее будет разобраться что у вас не получается
Автор: asi81
Дата сообщения: 29.12.2009 17:57
vladman
А примера с исходниками просто нет . Могу описать что сделал -
1 - положил на основную форму dxSkinController, выбрал в нем скины поставил UseSkins = true, После этого у меня все контролы, кроме dxBarManager, покрасились в скин. Запустил - все так, как в дизайн-тайм.
2. Далее установил в dxBarManager Style - bmsUseLookAndFeel Native Style == false и SkinName = "XMas2008Blue(или както так)" В дизайне все тул-бары покрасились как нужно. Запустил - тулбары и попап меню не закрашиваются.

3. Пытался использовать dxSkinController->Refresh(), не помогло.

Автор: vladman
Дата сообщения: 29.12.2009 18:17
asi81

Цитата:
Запустил - тулбары и попап меню не закрашиваются.

Значит в коде (при старте приложения, создании/отображении формы) вы меняете какое(какие)-то свойства BarManager'а установленные в DesignTime. Либо вычитываете сохраненные в ini файле или реестре, которые, опять же, меняют ваши DesignTime настройки. Проверьте.
Автор: asi81
Дата сообщения: 29.12.2009 21:17
ini файл точно не грузил - проверял. Еще раз проверю, если где то меняю настройки BarManage . В приложении есть несклько форм - там могут быть свои LookAndFeelController. Это может влиять?
Автор: crazypiggy
Дата сообщения: 30.12.2009 09:34
vladman
Сделал все как Вы сказали. Есть эффект того что что-то переносится, но когда я отпускаю запись, он остается на том же месте. Начинает работать лишь тогда когда я включаю в FIBDATASET.Autocommit=true. Но мне не хочется чтобы это происходил автоматически. И почему то когда я становлюсь в самое окончание cxDBTreelist и нажимаю кнопку вниз или делаю FIBDataset.Append появляется запись внизу, но не могу ничего туда занести, ругается что поле не может быть null. Оно у меня действительно not null. Но как же мне занести туда данные?Чтото я никак не могу уразуметь этот cxDBTreelist.
Помогите!!!
Автор: vladman
Дата сообщения: 30.12.2009 10:02
crazypiggy

Цитата:
Начинает работать лишь тогда когда я включаю в FIBDATASET.Autocommit=true. Но мне не хочется чтобы это происходил автоматически.

А как хочется?

Цитата:
Но как же мне занести туда данные?

Посмотреть, есть ли в вашем pFibDataSet Update опрератор, разрешено ли вашему pFibDataSet изменять данные (см. свойство AllowedApdateKinds), установлено ли свойство у вашего cxDBTreelist OptionSelection.CellSelect в True, установлено ли свойство у вашего cxDBTreelist OptionData.Editing в True, установлено ли свойство у вашей cxDBTreelistColumn (которую вы хотите отредактировать) Options.Editing в True и Options.focusing в True.
Напишите, что конкретно вы хотите реализовать, а лучше, набросайте пример, который у вас не работает так ка вы задумали, и уже на этом примере попробую помочь решить вашу проблемы.

Добавлено:
asi81

Цитата:
В приложении есть несклько форм - там могут быть свои LookAndFeelController. Это может влиять?

Наверное может, но почем мне знать - что и как у вас реализовано можно только догадываться без кода. А в чем причина использования "своих" LookAndFeelController? Вполне достаточно одного на все приложение. Да и при использовании dxSkinController'а нет необходимости использовать LookAndFeelController. dxSkinController это наследник от LookAndFeelController у которого расширен функционал касательно скинов.
Автор: Chukotka
Дата сообщения: 30.12.2009 10:21
Никто толком ничего не сказал, поэтому обращаюсь к vladman:

имеем ячейку TcxVerticalGrid c EditProperties = TcxCustomMemoProperties.
Как при этом достучаться до TcxMemo, в которой происходит редактирование данных ячейки (нужно чтобы установить курсор Memo в определенную позицию?)
Автор: GOA78
Дата сообщения: 30.12.2009 10:25
Использую cxGrid.
при использование OnFocusedRecordChanged я наблюдаю что при перемещении с одной записи на другую он используется несколько раз. Как правильно его использовать (OnFocusedRecordChanged)???
Спасибо.
Автор: crazypiggy
Дата сообщения: 30.12.2009 10:32
А как мне отправить файл с примерами?

Добавлено:
vladman
Вроде нашел как загрузить.

http://www.sharemania.ru/0276697
Автор: X11
Дата сообщения: 30.12.2009 10:40

Цитата:
имеем ячейку TcxVerticalGrid c EditProperties = TcxCustomMemoProperties.
Как при этом достучаться до TcxMemo,


А если через InplaceEditor
что-то типа:
var
e:TcxCustomEdit;
begin
e := cxVerticalGrid.InplaceEditor; // vgJobDetsStatus.InplaceEditor
newValue := e.EditValue;
Автор: f3ka
Дата сообщения: 30.12.2009 10:42
GOA78
не понятно как это у вас получилось добиться... на новом (тестовом) проекте у меня OnFocusedRecordChanged вызывается 1 раз на запись...
возможно есть какие то обработчики которые вызывают OnFocusedRecordChanged ?
crazypiggy
надо выложить на какой нибудь файлообменник
Автор: X11
Дата сообщения: 30.12.2009 10:43
Щас нет возможности проверить работоспособность, вот

procedure TfmSearch.Button1Click(Sender: TObject);
begin
TcxMemo(cxVerticalGrid1.InplaceEditor).<свойство>
end;
Автор: crazypiggy
Дата сообщения: 30.12.2009 10:47
vladman

http://www.sharemania.ru/0276697

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

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


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