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

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

Автор: X11
Дата сообщения: 10.12.2010 12:44
Показать 5 колонок может и LookupCombobox
Автор: Cryogen2003
Дата сообщения: 10.12.2010 12:55
X11
Да, но мне нужна далеко не одна запись
Автор: X11
Дата сообщения: 10.12.2010 13:21
А с чего ты взял, что LookupCombobox отображает только одну запись?
Автор: rdenk1
Дата сообщения: 10.12.2010 15:43
Добавил одну строку, а вторую не получается. Не на что нажать, чтобы завершилось редактирование текущей строки и создалась другая.
Можно конечно с навигатором, но хотелось бы сделать добавку строки просто по нажатию например клавиши Enter. Какое условие нужно прописывать в Onkeydown чтобы проверить, что пользователь находится не в уже добавленной строке, а в добавляемой (в самом верху)?
Автор: tanaseduard
Дата сообщения: 10.12.2010 17:51
rdenk1

А кнопочка "Post"?
Автор: RomanDaemon
Дата сообщения: 10.12.2010 22:29
vladman

Цитата:
Да, точно, посмотрел, так и было. Помню, что обсуждали эту проблему, а что через ПМ, вот, видите, забыл. Ну тогда давайте ваш пример, только в качестве датасетов используйте MemData. Посмотрим что можно сделать.


Сделал 2 примера. Один с мемдата другой на MS SQL 2008 (test1.bak), так как мемдата с SQL не работает. То что на мемдате вообще сразу вылетает, когда пытаешься редактировать мастер dataset в событии afterpost. Тот что на MS SQL сделан именно так, как я и писал, при изменении данных в детейл вьюхе - пишется в мастер dataset, с помощью query и надо потом отобразить эти изменения.
Вообще проблема намного шире, например, запись которую мы пытаемся редактировать, и которая связана через relationship удалил вместе с мастер записью другой пользователь. Мы пытаемся запостить изменения, которые внесли через грид - получаем ошибку. Отлавливаем ее и теперь неплохо бы обновить в этом случае мастер-dataset - получаем AV... В общем вопрос насущный.


Файлы : http://ifolder.ru/20738183
PS перезалил файлы - в предыдущий zip лишний каталог попал
Автор: rdenk1
Дата сообщения: 11.12.2010 00:31
как работать с контролами внутри ячеек cxgrid? Как обратиться к их свойствам? Контрол поставлен в properties в designtime, а обратиться надо в runtime.
Автор: linker_2009
Дата сообщения: 11.12.2010 08:36
rdenk1
Обычно изменяют свойства контрола для всего столбца. Например, если designtime у столбца выставлен ComboBox, то в runtime доступ осуществляется так
TcxComboBoxProperties(<YouCxGridColumn>.Properties).<нужно свойсто>


Автор: X11
Дата сообщения: 11.12.2010 21:19
Девки, как всегда в своём репертуаре . Без танцев с бубном к ним не подходи.

Проблема с событием OnInitPopop - список не выпадает, хотя записи в нём есть.
EditProperties := ComboBox;
DropDownStyle := lsEditFixedList;

Есть cxVerticalGrid. Там есть три строки. В зависимости от того, что пользователь выбрал в первых двух, нужно загрузить в третью соответствующие данные данные для дальнейшего выбора.

В событии OnInitPopop третьей строки:

Код:
procedure TfmClientPropose.colIDObjectEditPropertiesInitPopup(Sender: TObject);
begin
LoadComboboxByID(TcxComboBoxProperties(colSuperType.properties.EditProperties).Items.IndexOf(colSuperType.properties.Value),
vID_Type_KeyVal);
end;
Автор: tanaseduard
Дата сообщения: 11.12.2010 22:13
X11
Сталкивался с подобной проблемой, сделали другим методом, в свойстве OnGetPropertiesForEdit подставляли с репозитория ссылку на готовый комбо бокс.
Автор: rdenk1
Дата сообщения: 12.12.2010 03:14
linker_2009

Цитата:
Обычно изменяют свойства контрола для всего столбца. Например, если designtime у столбца выставлен ComboBox, то в runtime доступ осуществляется так
TcxComboBoxProperties(<YouCxGridColumn>.Properties).<нужно свойсто>

Но пользователь в комбобоксе каждой ячейки может выбрать разные значения. Получается, все равно придется обращаться именно к каждому экземпляру комбобокса отдельно, чтоб потом считать все это.
Автор: marser
Дата сообщения: 12.12.2010 10:41
rdenk1

Цитата:
как работать с контролами внутри ячеек cxgrid? Как обратиться к их свойствам? Контрол поставлен в properties в designtime, а обратиться надо в runtime.

Через события cxGridDBColumn.Properties.OnInitPopup, cxGridDBColumn.Properties.OnChange и т.д. Параметр Sender: TObject и есть нужный контрол. Не забудь сделать приведение типа, например TcxLookupComboBox(Sender).
Автор: tanaseduard
Дата сообщения: 12.12.2010 18:01
Не нашел параметра Align для TcxLookupComboBox.
Хотя свойство AlignWithMargins присутствует.

Направьте на пусть истинный блуждающего во тьме.
Автор: dimm78
Дата сообщения: 12.12.2010 18:45

Цитата:
Не нашел параметра Align для TcxLookupComboBox.
Хотя свойство AlignWithMargins присутствует.


Насколько я помню это свойство у большинства Девовских эдиторов не опубликовано. Доступ можно получить только из кода.
Автор: X11
Дата сообщения: 12.12.2010 18:52

Цитата:
Кто имел дело с TcxPropertiesStore, подскажите, как сохранить восстановить значения чекбоксов у компоненты TcxCheckCombobox.


я так понял, что достаточно сохранять свойство Value
cxCheckCombobox1.Value
Автор: tanaseduard
Дата сообщения: 12.12.2010 19:10
dimm78
Спасибо. Проверим.

X11

Да.

Добавлено:
X11

Хотя думаю стоит еще сохранять
ValueChecked
ValueUnchecked
ValueGrayed

В случае если у тебя не Boolean, например в базюке хранишь значения 0-1.
Автор: X11
Дата сообщения: 12.12.2010 20:40

Цитата:
Хотя думаю стоит еще сохранять
ValueChecked
ValueUnchecked
ValueGrayed

В случае если у тебя не Boolean, например в базюке хранишь значения 0-1.


Хм... а как это в коде будет выглядеть?

А если значения динамические?
Автор: tanaseduard
Дата сообщения: 12.12.2010 22:03
X11
Что означает динамияеские?
А выглядеть будет также. Добавляешь эти параметры в секцию сохранения.
Автор: GRES
Дата сообщения: 13.12.2010 07:03
X11
1. у TcxPropertiesStore при Edit отмечаешь необходимые свойства компонента (делаешь Store)
2. по показе формы cxPropertiesStore.RestoreFrom;
3. при закрытии cxPropertiesStore.StoreTo(..)
Автор: rdenk1
Дата сообщения: 13.12.2010 08:31

Цитата:


Цитата:
как работать с контролами внутри ячеек cxgrid? Как обратиться к их свойствам? Контрол поставлен в properties в designtime, а обратиться надо в runtime.


Через события cxGridDBColumn.Properties.OnInitPopup, cxGridDBColumn.Properties.OnChange и т.д. Параметр Sender: TObject и есть нужный контрол. Не забудь сделать приведение типа, например TcxLookupComboBox(Sender).
Автор: marser
Дата сообщения: 13.12.2010 09:02
rdenk1
Что Вы понимаете под "контролами внутри ячеек cxgrid"? Элементы редактирования (контролы) ячеек инициализируются в момент их редактирования, а то что вы видите на экране просто нарисованная картинка.

Цитата:
И можно ли обратиться к свойствам самой ячейки?

К каким? Например, можно получить значение ячейки DataController.Values[...]

Цитата:
Цвет фона поменять например

Событие OnCustomDrawCell или OnGetContentStyle
Автор: X11
Дата сообщения: 13.12.2010 09:24

Цитата:
X11
1. у TcxPropertiesStore при Edit отмечаешь необходимые свойства компонента (делаешь Store)
2. по показе формы cxPropertiesStore.RestoreFrom;
3. при закрытии cxPropertiesStore.StoreTo(..)


как работать с TcxPropertiesStore я знаю, там всё достаточно понятно, а вот как сохранить и восстановить отмеченные строки у TcxCheckCombobox, я не знал.
Автор: vladman
Дата сообщения: 14.12.2010 12:50
RomanDaemon

Цитата:
Сделал 2 примера.

Только сейчас добрался до форума. Обязательно посмотрю и постараюсь помочь.
Автор: tanaseduard
Дата сообщения: 14.12.2010 16:38
Тестил девы 47-53.
На Win 7 медленно прорисовывается, скины соответственно жуть, на XP,2003 такой проблемы нет.
Как-то лечится?
Автор: TechnoDreamer
Дата сообщения: 14.12.2010 20:25
tanaseduard, более корректный вопрос - у всех проявляется? У меня вот такой проблемы нет. Сколько контролов?
Автор: tanaseduard
Дата сообщения: 14.12.2010 20:30
TechnoDreamer

У всех на Win 7 где слабый видео адаптер (64/128 мб).
Конролов в среднем :
3-7 Гридов
3-6 баров(на кадом в среднем по 3 кнопки).

Забавно то что на этой же тачке но по XP все летает.
Автор: volser
Дата сообщения: 14.12.2010 22:49
tanaseduard
Отключите эффекты, типа аэро.
Автор: vladman
Дата сообщения: 15.12.2010 01:12
RomanDaemon

Цитата:
Сделал 2 примера.

Решить вашу проблему попытался [more=вот таким образом]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
cxStyles, cxCustomData, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData,
dxmdaset, cxGridLevel, cxClasses, cxGridCustomView, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxGrid, dxSkinsCore, dxSkinMcSkin, dxSkinscxPCPainter;

const
MEMDATA1_UPDATE = WM_USER + 100;

type
TForm1 = class(TForm)
cxGrid1DBTableView1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
dxMemData1: TdxMemData;
dxMemData2: TdxMemData;
dxMemData2ID: TAutoIncField;
dxMemData2IDk: TIntegerField;
dxMemData2Data: TStringField;
dxMemData1ID: TAutoIncField;
dxMemData1Name: TStringField;
dxMemData1Modified: TDateTimeField;
DataSource1: TDataSource;
DataSource2: TDataSource;
cxGrid1DBTableView1RecId: TcxGridDBColumn;
cxGrid1DBTableView1ID: TcxGridDBColumn;
cxGrid1DBTableView1Name: TcxGridDBColumn;
cxGrid1DBTableView1Modified: TcxGridDBColumn;
cxGrid1Level2: TcxGridLevel;
cxGrid1DBTableView2: TcxGridDBTableView;
cxGrid1DBTableView2RecId: TcxGridDBColumn;
cxGrid1DBTableView2ID: TcxGridDBColumn;
cxGrid1DBTableView2IDk: TcxGridDBColumn;
cxGrid1DBTableView2Data: TcxGridDBColumn;
procedure dxMemData2AfterPost(DataSet: TDataSet);
private
procedure MemData1Update(var Msg: TMessage); message MEMDATA1_UPDATE;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.dxMemData2AfterPost(DataSet: TDataSet);
begin
PostMessage(Handle, MEMDATA1_UPDATE, 0, 0);
end;

procedure TForm1.MemData1Update(var Msg: TMessage);
begin
dxMemData1.Edit;
dxMemData1.FieldByName('Modified').Value:=now;
dxMemData1.Post;
end;

end.
[/more], немного подправив ваш тестовый модуль. Думаю, основная идея решения не вызовет у вас затруднений.
Автор: SIgor33
Дата сообщения: 15.12.2010 09:52
Подскажите как сделать следующие:
есть TcxGridDBTableView у него в качестве редактора поля используется ButtonEdit хотелось бы чтобы текст который в данном поле редактировался только после нажатия соответствующего Button и нельзя было его ручками редактировать. Ставил (TcxGridColumnOptions) запрет Editing, при этом ButtonEdit тоже не нажимается.
Что сделать?
Автор: vladman
Дата сообщения: 15.12.2010 10:09
SIgor33

Цитата:
...ButtonEdit хотелось бы чтобы текст который в данном поле редактировался только после нажатия соответствующего Button и нельзя было его ручками редактировать

Установите свойство Properties.ViewStyle = vsHideCursor у ButtonEditProperties

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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