timaskraft
(Timur Kravtsov)
03.Май.2023 09:43:51
1
Реализую создание записи в DataGrid.
@Subscribe("specificationTable.create")
public void onSpecificationTableCreate(Action.ActionPerformedEvent event) {
AnalyticSpec newSpec = dataContext.create(AnalyticSpec.class);
newSpec.setAnalytic(analyticDc.getItem());
specificationDc.getMutableItems().add(newSpec);
specificationTable.edit(newSpec);
}
Каким образом установить фокус на поле новой записи по дефолту для заполнения?
Ранее вопрос задавал по координатам курсора, возможно смежная проблема с невозможностью принудительной навигации внутри таблицы, кроме как setSelected по строке.
d.kremnev
(Dmitriy Kremnev)
03.Май.2023 15:01:38
2
Добрый день!
Судя по всему, Вы пытаетесь установить для всех новых AnalyticsSpec определенный параметр.
Вам точно хотите работать с фокусами на полях таблицы?
Если Вам требуется просто установить параметр в новую сущность, то можете попробовать следующий код:
@Subscribe("specificationTable.create")
public void onSpecificationTableCreate(Action.ActionPerformedEvent event) {
AnalyticSpec newSpec = dataContext.create(AnalyticSpec.class);
newSpec.setAnalytic(analyticDc.getItem());
screenBuilders.editor(specificationTable)
.newEntity(newSpec)
.show();
}
В таком случае требуется, чтобы specificationDc был связан со specificationTable.
С уважением, Дмитрий.
timaskraft
(Timur Kravtsov)
04.Май.2023 08:34:58
3
Добрый день!
Я использую datagrid с параметром editorEnabled=“true”.
Мне нужно создать новую запись по action Create, без вызова дополнительного диалога (ScreenBuilder не нужен).
Однако, при создании таким методом фокус в поле не становиться.
Добрый день,
Для установки фокуса можно использовать слушатель события EditorOpenEvent. Пример кода:
@Subscribe("table")
public void onTableEditorOpen(DataGrid.EditorOpenEvent<?> event) {
((Component.Focusable) event.getField("code")).focus();
}
1 лайк
timaskraft
(Timur Kravtsov)
11.Май.2023 09:16:50
6
Возник нюанс, при создании курсор фокусируется в поле, но и при редактировании так же становиться в это же поле. При редактировании поведение должно быть штатным, без принудительной фокусировки.
Как вариант, можно добавить в экран переменную boolean, устанавливать её при создании новой записи и проверять/сбрасывать в onTableEditorOpen:
boolean newEntityEdited = false;
@Subscribe("table.create")
public void onTableCreate(Action.ActionPerformedEvent event) {
...
newEntityEdited = true;
table.edit(entity);
}
@Subscribe("table")
public void onTableEditorOpen(DataGrid.EditorOpenEvent<?> event) {
if (newEntityEdited) {
((Component.Focusable) event.getField("code")).focus();
newEntityEdited = false;
}
}
1 лайк
timaskraft
(Timur Kravtsov)
11.Май.2023 12:28:03
8
тоже думал об этом, но надеялся, что будет решение “покрасивше”. Немного не хватает все же датагриду свойств и методов…