Создание в DataGrid новой записи и фокус курсора в поле

Реализую создание записи в 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 по строке.

Добрый день!

Судя по всему, Вы пытаетесь установить для всех новых 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.

С уважением, Дмитрий.

Добрый день!
Я использую datagrid с параметром editorEnabled=“true”.
Мне нужно создать новую запись по action Create, без вызова дополнительного диалога (ScreenBuilder не нужен).
chrome_ot9rdn2sC1

Однако, при создании таким методом фокус в поле не становиться.

Добрый день,

Для установки фокуса можно использовать слушатель события EditorOpenEvent. Пример кода:

    @Subscribe("table")
    public void onTableEditorOpen(DataGrid.EditorOpenEvent<?> event) {
        ((Component.Focusable) event.getField("code")).focus();
    }
1 симпатия

спасибо, попробую!

Возник нюанс, при создании курсор фокусируется в поле, но и при редактировании так же становиться в это же поле. При редактировании поведение должно быть штатным, без принудительной фокусировки.

Как вариант, можно добавить в экран переменную 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 симпатия

тоже думал об этом, но надеялся, что будет решение “покрасивше”. Немного не хватает все же датагриду свойств и методов…