Проблема с автозаполнением строк

Здравствуйте!

Пользователю требуется вводить данные напрямую на экране brows.xml минуя стандартное решение jimix через экран edit.xml.

Для этого нашли пример кода вот здесь https://demo.jmix.io/sampler/#main/0/sample?id=datagrid-editor-actions

В принципе все подходит кроме одного - при добавлении строки в таком стандартном решении необходимо подтверждать ввод данных через кнопку “ОК”. И если строка не заполнена, то при создании новой строки выдается сообщение “Close the editor before creating a new entity”/

Пользователю нужно вводить данные без такого подтверждения через кнопку “ОК”. Нужно, чтобы данные “автосохранялись” . Но код этих кнопок и сообщений где то под капотом как я понимаю. Не очень понятно в какой метод “зашита” кнопка “ОК”

Есть ли пример кода где бы пользователи могли бы сохранять данные сразу после их ввода?

Вот код xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>






















    <dataGrid id="buildingsDc1" width="100%" editorEnabled="true" dataContainer="buildingsesDc">
        <actions>
            <action id="create" type="create"/>
            <action id="edit" type="edit"/>
        </actions>
        <columns>
            <column id="building_1" property="building_1"/>
            <column id="building_2" property="building_2"/>
        </columns>

        <buttonsPanel id="buttonsPanel" alwaysVisible="true">
            <button id="createBtn" action="buildingsDc1.create"/>

        </buttonsPanel>
    </dataGrid>
    <hbox id="lookupActions" spacing="true" visible="false">
        <button action="lookupSelectAction"/>
        <button action="lookupCancelAction"/>
    </hbox>
</layout>

Вот код в соответствующем интерфейсе Browse.java
package com.company.test_125.screen.buildings;

import com.vaadin.annotations.Viewport;
import com.vaadin.spring.annotation.ViewScope;
import io.jmix.core.Metadata;
import io.jmix.ui.Notifications;
import io.jmix.ui.UiComponents;
import io.jmix.ui.action.Action;
import io.jmix.ui.component.DataGrid;
import io.jmix.ui.model.CollectionContainer;
import io.jmix.ui.screen.*;
import com.company.test_125.entity.Buildings;
import jdk.jfr.MetadataDefinition;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;

@UiController(“Buildings.browse”)
@UiDescriptor(“buildings-browse.xml”)
//@LookupComponent(“buildingsesTable”)
public class BuildingsBrowse extends StandardLookup {

@Autowired
protected DataGrid<Buildings> buildingsDc1;
@Autowired
protected CollectionContainer<Buildings> buildingsesDc;
@Autowired
protected Notifications notifications;
@Autowired
protected Metadata metadata;

@Subscribe("buildingsDc1.create")
public void onEditActionsCreate(Action.ActionPerformedEvent event) {
    if (buildingsDc1.isEditorActive()) {
        notifications.create()
                .withCaption("Close the editor before creating a new entity")
                .show();
    } else {
        Buildings newCustomer = metadata.create(Buildings.class);
        buildingsesDc.getMutableItems().add(newCustomer);
        buildingsDc1.edit(newCustomer);
    }
}

@Subscribe("buildingsDc1.edit")
public void onEditActionsEdit(Action.ActionPerformedEvent event) {
    Buildings selected = buildingsDc1.getSingleSelected();
    if (selected != null) {
        buildingsDc1.edit(selected);
    } else {
        notifications.create()
                .withCaption("Item is not selected")
                .show();
    }}

}

image

Добрый день,

И если строка не заполнена, то при создании новой строки выдается сообщение “Close the editor before creating a new entity”.

Насколько я вижу, это предупреждение создается в вашем коде, в методе onEditActionsCreate. Можно заменить вывод предупреждения на автоматическое сохранение изменений.

ublic void onEditActionsCreate(Action.ActionPerformedEvent event) {
    if (buildingsDc1.isEditorActive()) {
        buildingsDc1.editor.save();
    } else {
        Buildings newCustomer = metadata.create(Buildings.class);
        buildingsesDc.getMutableItems().add(newCustomer);
        buildingsDc1.edit(newCustomer);
    }
}

Скопировал строку из кода на kotlin, для Java будет buildingsDc1.getEditor().save();

Спасибо.
подскажите какой кусок кода отвечает за кнопку ОК?
Как можно убрать кнопку “ОК”?
И как сделать, чтобы сохранение данных происходило после ввода каждого нового символа?

Как можно убрать кнопку “ОК”? И как сделать, чтобы сохранение данных происходило после ввода каждого нового символа?

Можно отключить буфер редактора (editorBuffered=“false”), тогда кнопки ОК и Cancel не будут отображаться и изменения будет сохраняться сразу. Как это выглядит можно посмотреть в примере https://demo.jmix.io/sampler/#main/3/sample?id=datagrid-editor.

подскажите какой кусок кода отвечает за кнопку ОК?

Сама кнопка реализована на стороне клиента, как я понимаю. Серверный код можно посмотреть в классах com.vaadin.ui.components.grid.EditorImpl, io.jmix.ui.widget.grid.JmixEditorImpl.

Здравствуйте!
Смотрю ваш пример по ссылке https://demo.jmix.io/sampler/#main/3/sample?id=datagrid-editor
Там при редактирования поля кнопка ОК все равно возникает, автосохранение измененного поля в этом примере не предусмотрено. Есть пример савтосохранением?

Еще вопро - в каком контейнере прописывать editorBuffered=“false”? К примеру если прописывать в dataGrid, то это не помогает. Кнопка все равно остается.

А где там возникает кнопка OK? Если отключить галочку “Editor buffered”, то редактирование происходит прямо в таблице, без буферного редактора.

image

Добрый день!
В продолжении этой темы я попытался применить код из этого примера и сейчас получаю ошибку: DevelopmentException: Unable to find an instance of type ‘class com.vaadin.ui.CheckBox’ named ‘editorBuffered’ for instance of ‘com.company.test_125.screen.cars.CarsBrowse’

Вот скрин ошибки и код
image

package com.company.test_125.screen.cars;

import com.company.test_125.entity.Flowers;
import com.vaadin.ui.CheckBox;
import io.jmix.ui.Notifications;
import io.jmix.ui.component.DataGrid;
import io.jmix.ui.component.HasValue;
import io.jmix.ui.screen.*;
import com.company.test_125.entity.Cars;
import org.springframework.beans.factory.annotation.Autowired;

@UiController(“Cars.browse”)
@UiDescriptor(“cars-browse.xml”)
@LookupComponent(“carsesTable”)
public class CarsBrowse extends StandardLookup {

@Autowired
protected DataGrid<Cars> customersDataGrid;
@Autowired
protected CheckBox editorBuffered;

@Autowired
protected Notifications notifications;

@Subscribe
protected void onInit(InitEvent event) {
    editorBuffered.setValue(customersDataGrid.isEditorBuffered());
}

@Subscribe("editorBuffered")
protected void onEditorBufferedValueChange(HasValue.ValueChangeEvent<Boolean> event) {
    if (!event.isUserOriginated()) {
        return;
    }

   if (customersDataGrid.isEditorActive()) {
        notifications.create()
                .withCaption("Please close Editor before changing its mode")
                .withType(Notifications.NotificationType.WARNING)
                .show();
        editorBuffered.setValue(event.getPrevValue());
    } else {
        customersDataGrid.setEditorBuffered(Boolean.TRUE.equals(event.getValue()));
    }
}

}

<?xml version="1.0" encoding="UTF-8" standalone="no"?>






















    <filter id="filter"
            dataLoader="carsesDl">
        <properties include=".*"/>
    </filter>
    <groupTable id="carsesTable"
                width="100%"
                dataContainer="carsesDc">

        <actions>
            <action id="create" type="create"/>
            <action id="edit" type="edit"/>
            <action id="remove" type="remove"/>
        </actions>


        <columns>
            <column id="car_1"/>
            <column id="car_2"/>
        </columns>

        <simplePagination/>
        <buttonsPanel id="buttonsPanel"
                      alwaysVisible="true">
            <button id="createBtn" action="carsesTable.create"/>
            <button id="editBtn" action="carsesTable.edit"/>
            <button id="removeBtn" action="carsesTable.remove"/>
        </buttonsPanel>
    </groupTable>
    <hbox id="lookupActions" spacing="true" visible="false">
        <button action="lookupSelectAction"/>
        <button action="lookupCancelAction"/>
    </hbox>
</layout>

Ошибка возникает из-за того, что у вас в дескрипторе экрана не добавлен checkBox editorBuffered, как в примере.

image

Еще в новом дескрипторе у вас используется groupTable вместо dataGrid. Для dataGrid можно отключить буферизованное редактирование прямо в дескрипторе:

<dataGrid="carsesTable" dataContainer="carsesDc"  editorBuffered="false">
...
</dataGrid>

Добрый день!
Чек бокс как раз был добавлен в дескриптор экрана. Почему то этот кусок кода не скопировался. Сейчас посмотрите, прикрепил скрин. Вопрос как раз и заключается в том, что чек бокс добавлен, но почему то джанго его не видит и выдает ошибку. В чем может быть проблема?
смотрите строку 34-35.
checkbox

По скриншотам сложно понять в чем ошибка. Можете прислать тестовый проект, в котором воспроизводится проблема? Думаю так быстрее сможем разобраться.

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

Что я делаю:

  1. создаю класс “cars”, где прописываю два поля car_1 и car_2 через дизайнер.
  2. Далее создаю два стандартных экрана car-brows и car-edit через кнопочку screens
  3. Далее дописываю код из примера в интерфейс CarsBrows.Java
    cars-edit.xml (1.5 КБ)
    cars-browse.xml (2.4 КБ)
    CarsEdit.java (1.5 КБ)
    CarsBrowse.java (1.5 КБ)
    Cars.java (1005 Байт)

Более детальный код ошибки:
io.jmix.core.DevelopmentException: Unable to find an instance of type ‘class com.vaadin.ui.CheckBox’ named ‘editorBuffered’ for instance of ‘com.company.test_125.screen.cars.CarsBrowse’

            at io.jmix.ui.sys.UiControllerDependencyInjector.doInjection(UiControllerDependencyInjector.java:487)

            at io.jmix.ui.sys.UiControllerDependencyInjector.injectValues(UiControllerDependencyInjector.java:259)

            at io.jmix.ui.sys.UiControllerDependencyInjector.inject(UiControllerDependencyInjector.java:96)

            at io.jmix.ui.sys.UiControllerDependencyManager.inject(UiControllerDependencyManager.java:61)

            at io.jmix.ui.sys.ScreensImpl.createScreen(ScreensImpl.java:212)

            at io.jmix.ui.sys.ScreensImpl.create(ScreensImpl.java:145)

            at io.jmix.ui.menu.MenuItemCommands$ScreenCommand.createScreen(MenuItemCommands.java:230)

            at io.jmix.ui.menu.MenuItemCommands$ScreenCommand.run(MenuItemCommands.java:169)

            at io.jmix.ui.menu.SideMenuBuilder$MenuCommandExecutor.accept(SideMenuBuilder.java:272)

            at io.jmix.ui.menu.SideMenuBuilder$MenuCommandExecutor.accept(SideMenuBuilder.java:257)

            at io.jmix.ui.component.mainwindow.impl.SideMenuImpl$MenuItemImpl.menuSelected(SideMenuImpl.java:587)

            at io.jmix.ui.widget.JmixSideMenu$1.menuItemTriggered(JmixSideMenu.java:91)

            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

            at java.base/java.lang.reflect.Method.invoke(Method.java:566)

            at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153)

            at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115)

            at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:442)

            at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:407)

            at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:275)

            at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:83)

            at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)

            at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1636)

            at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:465)

            at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)

            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)

            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

            at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

            at io.jmix.core.impl.logging.LogMdcFilter.doFilterInternal(LogMdcFilter.java:28)

            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337)

            at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)

            at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)

            at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)

            at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:106)

            at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:97)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:147)

            at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)

            at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)

            at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)

            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)

            at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)

            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)

            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)

            at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221)

            at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)

            at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)

            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)

            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

            at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)

            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

            at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)

            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

            at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)

            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177)

            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)

            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)

            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)

            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)

            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)

            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)

            at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)

            at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)

            at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891)

            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784)

            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

            at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)

            at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)

            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

            at java.base/java.lang.Thread.run(Thread.java:829)

Добрый день! не могу к сожалению весь проект выгрузить сюда по соображениям безопасности у нас.

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

Могу отдельные файлы прислать с кодом…

В приложенных файлах я вижу несколько проблем.

  1. Ошибка с checkbox возникает из-за неправильного импорта. В классе CarsBrowse используется импорт com.vaadin.ui.CheckBox, а нужно использовать io.jmix.ui.component.CheckBox.

  2. В дескрипторе cars-browse.xml используется groupTable, а в классе экрана CarsBrowse - DataGrid. Для использования буферизованного редактирования нужно заменить groupTable на dataGrid, как я выше писал.

добрый вечер!
сделал как вы говорите. Файлы прикрепил
cars-browse (1).xml (2.4 КБ)
CarsBrowse (1).java (1.5 КБ)

Но возникла новая ошибка:
DevelopmentException: Unable to find an instance of type ‘interface io.jmix.ui.component.DataGrid’ named ‘customersDataGrid’ for instance of ‘com.company.test_125.screen.cars.CarsBrowse’

То есть требуется новый интерфейс, А можно как то обойтись одним?
А если я меняю код как в примере на 16 ой строке со стандартного “public class CarsBrowse extends StandardLookup” на то как у вас в примере “public class CarsBrowse extends ScreenFragment”, то получаю ошибку другого рода “IllegalArgumentException: Unable to create screen Cars.browse with type FRAGMENT”

Эта ошибка возникает из-за того, что id таблицы в дескрипторе и имя переменной в классе экрана не совпадают. Что бы работал Autowired нужно что id и имя совпадали (или добавить отдельную аннотацию @Named). Самой простое решение - переименовать свойство customersDataGrid в carsesTable.

А если я меняю код как в примере на 16 ой строке со стандартного “public class CarsBrowse extends StandardLookup” на то как у вас в примере “public class CarsBrowse extends ScreenFragment”, то получаю ошибку другого рода…

ScreenFragment здесь использовать не нужно. Описание и сценарии использования фрагментов можно посмотреть в документации - Использование фрагментов экранов.

Здравствуйте! Похоже получилось, только вот не могу добавить кнопку которая добавляла бы строки в контейнер. Я в итоге взял пример из того кода, на который вы дали ссылку (https://demo.jmix.io/sampler/#main/0/sample?id=datagrid-editor). Пока у меня получается пустая таблица без сторк. Как в пример в xml код правильно добавить стандартные кнопки add, edit?
Там похоже нужно правильные контейнеры подобрать. Просто добавить теги <action … и <button … не помогает.

Я сейчас получаю ошибку вот такого рода:

GuiDevelopmentException: Can’t find component: carsesTable for action: carsesTable.create
Frame ID: Cars.browse
XML descriptor: /com/company/test_125/screen/cars/cars-browse.xml
Component ID: carsesTable

Добрый вечер!

Судя по тексту ошибка возникает при создании кнопки, не удается найти компонент carsesTable.

Пример с добавлением строк через inline editor есть в UI Samples - https://demo.jmix.io/sampler/#main/1/sample?id=datagrid-editor-actions.