Показать 5 колонок может и LookupCombobox
» Использование DevExpress (часть 4)
X11
Да, но мне нужна далеко не одна запись
Да, но мне нужна далеко не одна запись
А с чего ты взял, что LookupCombobox отображает только одну запись?
Добавил одну строку, а вторую не получается. Не на что нажать, чтобы завершилось редактирование текущей строки и создалась другая.
Можно конечно с навигатором, но хотелось бы сделать добавку строки просто по нажатию например клавиши Enter. Какое условие нужно прописывать в Onkeydown чтобы проверить, что пользователь находится не в уже добавленной строке, а в добавляемой (в самом верху)?
Можно конечно с навигатором, но хотелось бы сделать добавку строки просто по нажатию например клавиши Enter. Какое условие нужно прописывать в Onkeydown чтобы проверить, что пользователь находится не в уже добавленной строке, а в добавляемой (в самом верху)?
rdenk1
А кнопочка "Post"?
А кнопочка "Post"?
vladman
Цитата:
Сделал 2 примера. Один с мемдата другой на MS SQL 2008 (test1.bak), так как мемдата с SQL не работает. То что на мемдате вообще сразу вылетает, когда пытаешься редактировать мастер dataset в событии afterpost. Тот что на MS SQL сделан именно так, как я и писал, при изменении данных в детейл вьюхе - пишется в мастер dataset, с помощью query и надо потом отобразить эти изменения.
Вообще проблема намного шире, например, запись которую мы пытаемся редактировать, и которая связана через relationship удалил вместе с мастер записью другой пользователь. Мы пытаемся запостить изменения, которые внесли через грид - получаем ошибку. Отлавливаем ее и теперь неплохо бы обновить в этом случае мастер-dataset - получаем AV... В общем вопрос насущный.
Файлы : http://ifolder.ru/20738183
PS перезалил файлы - в предыдущий zip лишний каталог попал
Цитата:
Да, точно, посмотрел, так и было. Помню, что обсуждали эту проблему, а что через ПМ, вот, видите, забыл. Ну тогда давайте ваш пример, только в качестве датасетов используйте MemData. Посмотрим что можно сделать.
Сделал 2 примера. Один с мемдата другой на MS SQL 2008 (test1.bak), так как мемдата с SQL не работает. То что на мемдате вообще сразу вылетает, когда пытаешься редактировать мастер dataset в событии afterpost. Тот что на MS SQL сделан именно так, как я и писал, при изменении данных в детейл вьюхе - пишется в мастер dataset, с помощью query и надо потом отобразить эти изменения.
Вообще проблема намного шире, например, запись которую мы пытаемся редактировать, и которая связана через relationship удалил вместе с мастер записью другой пользователь. Мы пытаемся запостить изменения, которые внесли через грид - получаем ошибку. Отлавливаем ее и теперь неплохо бы обновить в этом случае мастер-dataset - получаем AV... В общем вопрос насущный.
Файлы : http://ifolder.ru/20738183
PS перезалил файлы - в предыдущий zip лишний каталог попал
как работать с контролами внутри ячеек cxgrid? Как обратиться к их свойствам? Контрол поставлен в properties в designtime, а обратиться надо в runtime.
rdenk1
Обычно изменяют свойства контрола для всего столбца. Например, если designtime у столбца выставлен ComboBox, то в runtime доступ осуществляется так
TcxComboBoxProperties(<YouCxGridColumn>.Properties).<нужно свойсто>
Обычно изменяют свойства контрола для всего столбца. Например, если designtime у столбца выставлен ComboBox, то в runtime доступ осуществляется так
TcxComboBoxProperties(<YouCxGridColumn>.Properties).<нужно свойсто>
Девки, как всегда в своём репертуаре . Без танцев с бубном к ним не подходи.
Проблема с событием 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;
Проблема с событием 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;
X11
Сталкивался с подобной проблемой, сделали другим методом, в свойстве OnGetPropertiesForEdit подставляли с репозитория ссылку на готовый комбо бокс.
Сталкивался с подобной проблемой, сделали другим методом, в свойстве OnGetPropertiesForEdit подставляли с репозитория ссылку на готовый комбо бокс.
linker_2009
Цитата:
Но пользователь в комбобоксе каждой ячейки может выбрать разные значения. Получается, все равно придется обращаться именно к каждому экземпляру комбобокса отдельно, чтоб потом считать все это.
Цитата:
Обычно изменяют свойства контрола для всего столбца. Например, если designtime у столбца выставлен ComboBox, то в runtime доступ осуществляется так
TcxComboBoxProperties(<YouCxGridColumn>.Properties).<нужно свойсто>
Но пользователь в комбобоксе каждой ячейки может выбрать разные значения. Получается, все равно придется обращаться именно к каждому экземпляру комбобокса отдельно, чтоб потом считать все это.
rdenk1
Цитата:
Через события cxGridDBColumn.Properties.OnInitPopup, cxGridDBColumn.Properties.OnChange и т.д. Параметр Sender: TObject и есть нужный контрол. Не забудь сделать приведение типа, например TcxLookupComboBox(Sender).
Цитата:
как работать с контролами внутри ячеек cxgrid? Как обратиться к их свойствам? Контрол поставлен в properties в designtime, а обратиться надо в runtime.
Через события cxGridDBColumn.Properties.OnInitPopup, cxGridDBColumn.Properties.OnChange и т.д. Параметр Sender: TObject и есть нужный контрол. Не забудь сделать приведение типа, например TcxLookupComboBox(Sender).
Не нашел параметра Align для TcxLookupComboBox.
Хотя свойство AlignWithMargins присутствует.
Направьте на пусть истинный блуждающего во тьме.
Хотя свойство AlignWithMargins присутствует.
Направьте на пусть истинный блуждающего во тьме.
Цитата:
Не нашел параметра Align для TcxLookupComboBox.
Хотя свойство AlignWithMargins присутствует.
Насколько я помню это свойство у большинства Девовских эдиторов не опубликовано. Доступ можно получить только из кода.
Цитата:
Кто имел дело с TcxPropertiesStore, подскажите, как сохранить восстановить значения чекбоксов у компоненты TcxCheckCombobox.
я так понял, что достаточно сохранять свойство Value
cxCheckCombobox1.Value
dimm78
Спасибо. Проверим.
X11
Да.
Добавлено:
X11
Хотя думаю стоит еще сохранять
ValueChecked
ValueUnchecked
ValueGrayed
В случае если у тебя не Boolean, например в базюке хранишь значения 0-1.
Спасибо. Проверим.
X11
Да.
Добавлено:
X11
Хотя думаю стоит еще сохранять
ValueChecked
ValueUnchecked
ValueGrayed
В случае если у тебя не Boolean, например в базюке хранишь значения 0-1.
Цитата:
Хотя думаю стоит еще сохранять
ValueChecked
ValueUnchecked
ValueGrayed
В случае если у тебя не Boolean, например в базюке хранишь значения 0-1.
Хм... а как это в коде будет выглядеть?
А если значения динамические?
X11
Что означает динамияеские?
А выглядеть будет также. Добавляешь эти параметры в секцию сохранения.
Что означает динамияеские?
А выглядеть будет также. Добавляешь эти параметры в секцию сохранения.
X11
1. у TcxPropertiesStore при Edit отмечаешь необходимые свойства компонента (делаешь Store)
2. по показе формы cxPropertiesStore.RestoreFrom;
3. при закрытии cxPropertiesStore.StoreTo(..)
1. у TcxPropertiesStore при Edit отмечаешь необходимые свойства компонента (делаешь Store)
2. по показе формы cxPropertiesStore.RestoreFrom;
3. при закрытии cxPropertiesStore.StoreTo(..)
Цитата:
Цитата:
как работать с контролами внутри ячеек cxgrid? Как обратиться к их свойствам? Контрол поставлен в properties в designtime, а обратиться надо в runtime.
Через события cxGridDBColumn.Properties.OnInitPopup, cxGridDBColumn.Properties.OnChange и т.д. Параметр Sender: TObject и есть нужный контрол. Не забудь сделать приведение типа, например TcxLookupComboBox(Sender).
rdenk1
Что Вы понимаете под "контролами внутри ячеек cxgrid"? Элементы редактирования (контролы) ячеек инициализируются в момент их редактирования, а то что вы видите на экране просто нарисованная картинка.
Цитата:
К каким? Например, можно получить значение ячейки DataController.Values[...]
Цитата:
Событие OnCustomDrawCell или OnGetContentStyle
Что Вы понимаете под "контролами внутри ячеек cxgrid"? Элементы редактирования (контролы) ячеек инициализируются в момент их редактирования, а то что вы видите на экране просто нарисованная картинка.
Цитата:
И можно ли обратиться к свойствам самой ячейки?
К каким? Например, можно получить значение ячейки DataController.Values[...]
Цитата:
Цвет фона поменять например
Событие OnCustomDrawCell или OnGetContentStyle
Цитата:
X11
1. у TcxPropertiesStore при Edit отмечаешь необходимые свойства компонента (делаешь Store)
2. по показе формы cxPropertiesStore.RestoreFrom;
3. при закрытии cxPropertiesStore.StoreTo(..)
как работать с TcxPropertiesStore я знаю, там всё достаточно понятно, а вот как сохранить и восстановить отмеченные строки у TcxCheckCombobox, я не знал.
RomanDaemon
Цитата:
Только сейчас добрался до форума. Обязательно посмотрю и постараюсь помочь.
Цитата:
Сделал 2 примера.
Только сейчас добрался до форума. Обязательно посмотрю и постараюсь помочь.
Тестил девы 47-53.
На Win 7 медленно прорисовывается, скины соответственно жуть, на XP,2003 такой проблемы нет.
Как-то лечится?
На Win 7 медленно прорисовывается, скины соответственно жуть, на XP,2003 такой проблемы нет.
Как-то лечится?
tanaseduard, более корректный вопрос - у всех проявляется? У меня вот такой проблемы нет. Сколько контролов?
TechnoDreamer
У всех на Win 7 где слабый видео адаптер (64/128 мб).
Конролов в среднем :
3-7 Гридов
3-6 баров(на кадом в среднем по 3 кнопки).
Забавно то что на этой же тачке но по XP все летает.
У всех на Win 7 где слабый видео адаптер (64/128 мб).
Конролов в среднем :
3-7 Гридов
3-6 баров(на кадом в среднем по 3 кнопки).
Забавно то что на этой же тачке но по XP все летает.
tanaseduard
Отключите эффекты, типа аэро.
Отключите эффекты, типа аэро.
RomanDaemon
Цитата:
Решить вашу проблему попытался [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], немного подправив ваш тестовый модуль. Думаю, основная идея решения не вызовет у вас затруднений.
Цитата:
Сделал 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], немного подправив ваш тестовый модуль. Думаю, основная идея решения не вызовет у вас затруднений.
Подскажите как сделать следующие:
есть TcxGridDBTableView у него в качестве редактора поля используется ButtonEdit хотелось бы чтобы текст который в данном поле редактировался только после нажатия соответствующего Button и нельзя было его ручками редактировать. Ставил (TcxGridColumnOptions) запрет Editing, при этом ButtonEdit тоже не нажимается.
Что сделать?
есть TcxGridDBTableView у него в качестве редактора поля используется ButtonEdit хотелось бы чтобы текст который в данном поле редактировался только после нажатия соответствующего Button и нельзя было его ручками редактировать. Ставил (TcxGridColumnOptions) запрет Editing, при этом ButtonEdit тоже не нажимается.
Что сделать?
SIgor33
Цитата:
Установите свойство Properties.ViewStyle = vsHideCursor у ButtonEditProperties
Цитата:
...ButtonEdit хотелось бы чтобы текст который в данном поле редактировался только после нажатия соответствующего Button и нельзя было его ручками редактировать
Установите свойство Properties.ViewStyle = vsHideCursor у ButtonEditProperties
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.