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

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

Автор: X11
Дата сообщения: 24.07.2012 09:37
Возможно у Вас какие-нибудь события влияют. См. события датасета и всё связки.
Попробуйте удалить связку и создать новую.

Добавлено:
Да, и ещё. Если Вы сохраняете/загружаете настройки грида, то отключите это на время теста.
Автор: DimDimBY
Дата сообщения: 24.07.2012 10:17
[more] X11
Да никаких событий нет. Я для этого вообще тестовое приложение слепил, состоящее из двух таблиц и грида.

type
TForm1 = class(TForm)
Button1: TButton;
DS_Razdel: TDataSource;
DS_Rab: TDataSource;
cxGrid1DBTableView1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
Tab_Razdel: TDBISAMTable;
Tab_Rab: TDBISAMTable;
cxGrid1DBTableView1NP: TcxGridDBColumn;
cxGrid1DBTableView1GRUPPA: TcxGridDBColumn;
cxGrid1DBTableView1K_GRUP: TcxGridDBColumn;
cxGrid1DBTableView1K_Ind: TcxGridDBColumn;
cxGrid1DBTableView1Osn: TcxGridDBColumn;
cxGrid1DBTableView2: TcxGridDBTableView;
cxGrid1DBTableView2NumGrup: TcxGridDBColumn;
cxGrid1DBTableView2P_NUM: TcxGridDBColumn;
cxGrid1DBTableView2NumWid: TcxGridDBColumn;
cxGrid1DBTableView2KodResurs: TcxGridDBColumn;
cxGrid1DBTableView2NumPoSmete: TcxGridDBColumn;
cxGrid1DBTableView2SWIAZ: TcxGridDBColumn;
cxGrid1DBTableView2TEXT: TcxGridDBColumn;
cxGrid1DBTableView2OSN: TcxGridDBColumn;
cxGrid1DBTableView2IZM: TcxGridDBColumn;
cxGrid1DBTableView2VR: TcxGridDBColumn;
cxGrid1Level2: TcxGridLevel;
ImageList1: TImageList;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
[/more]
Автор: delover
Дата сообщения: 24.07.2012 18:21
DimDimBY
Мне кажется при освоении Dev компонентов нужно учитывать что они работают в двух кардинально разных режимах - когда связанны с датасетом и когда они не связанны. Самый страшный - когда не связаны. Из этого следует, что главным при построении логики является грид а не датасет. Я имел опыт только с древними реализациями - конкретикой помочь не смогу. Главная и самая трудная задача - обнаружить переход от грида к датасету, далее должно сложиться как по маслу (ИМХО).

Добавлено:
Могу быть не прав так как перескакивание на первую колонку непонятно. Те же подозрения на сохраняемые настройки. Они могут быть не прописанными в компоненте.
Автор: exteris
Дата сообщения: 25.07.2012 06:04
DimDimBY У себя не нахожу такого поведения. Выложите исходники своего тестового приложения.
Автор: ChSerg
Дата сообщения: 25.07.2012 08:37
DimDimBY
Вот это не подойдет?
procedure TForm1.cxGrid1DBTableView1EditKeyDown(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem;
AEdit: TcxCustomEdit; var Key: Word; Shift: TShiftState);
begin
with Sender.Controller do
if FocusedItem.IsLast and FocusedRecord.IsLast and (Key = VK_RETURN) then
begin
Key := 0;
Sender.DataController.Append;
EditingController.ShowEdit(MyFourthColumn);
end;
end;
Автор: DimDimBY
Дата сообщения: 25.07.2012 09:26
exteris
На этом форуме недавно, поэтому как файлы прикручиваются ещё не разобрался, поэтому положил сюда:
http://belstroyka.by/PublicFiles/MyGrid.zip
Только там базы DBISAM используются, поэтому выложил со скомпилированным файлом

delover
Как я понял, позиционированием по колонкам управляет датасет а не грид, т.к. переход на нужную колонку решается через: Table_X.FieldByName('_X_').FocusControl;

Я то решил проблему через опу:
Ввёл глобальную переменную X_Pole : String;
В каждом редактируемом поле датасета в onChange: X_Pole:='имя поля'
И, наконец, в cxGrid1DBTableView2 --> onFocusedRecordChanged:
if X_Pole<>'' then
begin
Table_X.FieldByName(X_Pole).FocusControl;
X_Pole:='';
end;
Но как-то это не по фэншую...
Так что вопрос открыт.
Автор: AlexCoRu
Дата сообщения: 25.07.2012 10:06
DimDimBY

Цитата:
Как я понял, позиционированием по колонкам управляет датасет а не грид

У датасета нет понятия текущее поле (колонка, атрибут записи), есть понятие текущей записи. Вьюха в GridMode?
Вообще-то, с подобным поведением грида не сталкивался. Даже после преоткрытия датасета текущяя колонка в вьюхе не мняется. DataController.BeginFullUpdate/EndFullUpdate вызываются?
Посмотрел исходники - вопросы отпали. Всё-таки, что-то не так с датасетом. По TDBISAMTable ничего не скажу, пользуюсь devart.
Автор: GuSoft2007
Дата сообщения: 25.07.2012 13:05
подскажите в 2011.2.6 аналог для стандартного dbgrid? раньше вроде был dxdbgrid, а сейчас что?
Автор: X11
Дата сообщения: 25.07.2012 13:12
уже ОЧЕНЬ давно cxGrid
Автор: exteris
Дата сообщения: 25.07.2012 14:06
DimDimBY
Мдя, в исходниках ничего криминального. Остается только посоветовать обновить Девы. Хотя может и датасеты виноваты.
Автор: SevereK20
Дата сообщения: 25.07.2012 14:08
GuSoft2007
dbgrideh еще
Автор: AlexCoRu
Дата сообщения: 25.07.2012 20:30
Кстати, вопрос по cxGrid. В целях экономии пространства на экране в некоторой колонке отображаем только код из справочника, в котором имеется ещё одно поле - наименование. Колонка имеет свойство LookupComboBox, значение кода выбирается из этого справочника. Как можно сделать хинт, при наведении мыши на эту ячейку, с наименованием соответсвующим коду?

Добавлено:
Вспомнил, у колонки OnGetCellHint, а я искал у вьюхи. Даже испугался, вдруг убрали )
Автор: SevereK20
Дата сообщения: 25.07.2012 20:50
AlexCoRu
т.е. разобрались уже?
Автор: AlexCoRu
Дата сообщения: 25.07.2012 21:24
SevereK20, да разобрался.
Автор: Vixoid
Дата сообщения: 26.07.2012 06:48
а кто подскажет, с какой версии Девок началась поддержка Delphi XE?
Автор: dimm78
Дата сообщения: 26.07.2012 09:34
Vixoid

Цитата:
а кто подскажет, с какой версии Девок началась поддержка Delphi XE?


Насколько я помню по старой нумерации это была версия 1.56, а все релизы с новым порядком нумерации с самого начала ХЕ поддерживали
Автор: AlexCoRu
Дата сообщения: 26.07.2012 10:56
Таблица содержит сведения о некоторых отчётах (документах) составленных за период. Фактически период в таблице хранится в 2х полях "Дата начала периода" и "Дата окончания периода". А в интефейсе пльзователь должен иметь возможность указать квартал и год (месяц и год), но в БД должны сохраняться даты начала и окончания периода.
Понятно, что нужна unbound колонка. Сделал. В обработчике событие GetDataText этой кколонки читаю из датасета TcxGridDBLayoutView(Sender.GridView).DataController.DataSet.FieldValues['STARTING_DATE'] и получаю каждый раз значение из первой записи. Т.е. в обработчиках событий OnGetDataText и OnGetDisplayText синхронизации с датасетом не происходит.
Как поступить? Нужно смотреть другой обработчик? Самому синхронизировать, наверно, чревато? Или создать у вьюхи колонки для полей STARTING_DATE и ENDING_DATE и скрыть их?
Автор: SevereK20
Дата сообщения: 26.07.2012 17:25
cxLookUpComboBox получает данные из бд..
Есть ли возможность сделать чтобы выводилась не одно поле из БД, а два через пробел?
Это в DataSET'е надо новое поле делать? Подскажет кто?
Автор: AlexCoRu
Дата сообщения: 26.07.2012 18:19
SevereK20, да, только вычисляемые поля.
Автор: SevereK20
Дата сообщения: 26.07.2012 19:43
AlexCoRu
Можно пример?
Датасет еще один нужен тогда?.. опишите, плиз, в 2 словах
Автор: AndyZorg
Дата сообщения: 27.07.2012 07:22
AlexCoRu

Цитата:
Т.е. в обработчиках событий OnGetDataText и OnGetDisplayText синхронизации с датасетом не происходит.


Обработчик:
TcxGridGetDisplayTextEvent = procedure(Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AText: string) of object;

Смотрите в сторону параметра "ARecord: TcxCustomGridRecord".
Автор: exteris
Дата сообщения: 27.07.2012 08:57

Цитата:
Есть ли возможность сделать чтобы выводилась не одно поле из БД, а два через пробел?

Насколько я знаю, нет.

Цитата:
Это в DataSET'е надо новое поле делать?

Ага, как вариант, вычисляемое поле в датасете.
Автор: SevereK20
Дата сообщения: 27.07.2012 09:03

Цитата:
Ага, как вариант, вычисляемое поле в датасете.

я это уже понял. но можно более детаельно описать параметры этого самого вычисляемого поля?...
Автор: neznayka3
Дата сообщения: 27.07.2012 12:12
как программно сделать сохранение в cxComboxBox?
Автор: OXDBA
Дата сообщения: 27.07.2012 12:58
SevereK20
А в запросе два поля объединить и спокойно вывести результат в lookup что мешает?
Автор: SevereK20
Дата сообщения: 27.07.2012 14:36

Цитата:
как программно сделать сохранение в cxComboxBox?

что значит программное сохранение?
если хотите чтобы выбор сохранялся в бд - вам нужен cxDBLookupcombobox..
OXDBA
блин, спасибо!
Автор: neznayka3
Дата сообщения: 27.07.2012 14:46
SevereK20
есть несколько Combobox со значениями, после выбора нужных юзер жмет F3 и начинается поиск. значение последнего Combobox-а не сохраняется. может потому ,что на нем фокус остается а юзер не жмет enter а сразу F3?
Автор: lalakaka
Дата сообщения: 27.07.2012 15:14
Подскажите как сделать в cxgrid так чтобы при добавлении новой записи DataSet.Append
нельзя было перейти на другую запись т.е чтобы фокус держался только на новой пока не сохранить или не отменить.
Автор: SevereK20
Дата сообщения: 27.07.2012 15:46

Цитата:
есть несколько Combobox со значениями, после выбора нужных юзер жмет F3 и начинается поиск. значение последнего Combobox-а не сохраняется. может потому ,что на нем фокус остается а юзер не жмет enter а сразу F3?

Ну он же выбирает в этом чекбоксе значение - раскрывает список. выбирает элемент. он не выбирается или что?
После того как вы выбрали элемент в cxComboBox1 у вас сразу же значение cxComboBox1.EditValue будет тем, что было выбрано. И не надо никакой enter нажимать
Автор: exteris
Дата сообщения: 28.07.2012 08:26
lalakaka
Попробуйте событие OnCanFocusRecord.
Типа:

Код: If ARecord.Index<>{номер добавленной записи} And {проверка на сохранение/отмену} Then AAllow:=False;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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