In this blog, we’ll explore Inline Editing Grid in Magento 2 Backend and how it helps admins quickly update product and order data directly from the grid view.
There are three main steps for the inline edit in Admin:
1) create a grid using the UI component.
2) make the clickable element to edit the data.
3) create the controller for saving edited data.
Create a grid using the UI component:
Firstly, you can check how to create the admin grid using UI component from the wonderful blog UI Component Grid
In the element Columns, I will register the inline editing and will make the grid clickable by the element fieldAction.
<settings>
<editorConfig>
<param name="selectProvider" xsi:type="string">test_test_list.test_test_list.test_test_columns.ids</param>
<param name="enabled" xsi:type="boolean">true</param>
<param name="indexField" xsi:type="string">entity_id</param>
<param name="clientConfig" xsi:type="array">
<item name="saveUrl" path="productattachment/test/inlineEdit" xsi:type="url"/>
<item name="validateBeforeSave" xsi:type="boolean">false</item>
</param>
</editorConfig>
<childDefaults>
<param name="fieldAction" xsi:type="array">
<item name="provider" xsi:type="string">test_test_list.test_test_list.test_test_columns_editor</item>
<item name="target" xsi:type="string">startEdit</item>
<item name="params" xsi:type="array">
<item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
<item name="1" xsi:type="boolean">true</item>
</item>
</param>
</childDefaults>
</settings>
The action inlineEdit will save the data into the database.
Now, We will make the column editable which we want to edit in the grid using the element editor.
<column name="qty">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="editor" xsi:type="array">
<item name="editorType" xsi:type="string">text</item>
<item name="validation" xsi:type="array">
<item name="required-entry" xsi:type="boolean">true</item>
<item name="validate-zero-or-greater" xsi:type="boolean">true</item>
</item>
</item>
<item name="label" xsi:type="string" translate="true">Quantity</item>
<item name="sortOrder" xsi:type="number">4</item>
</item>
</argument>
</column>
editorType: Type of the editor such as text, date, select etc.
validation: Validation rules which you want to apply before the save.
Then you will see the Magento admin grid like below image.
Create the controller for saving edited data:
Now, create the InlineEdit.php file to get data and save it in the database.
This file will be located under app/code/Webkul/Test/Controller/Adminhtml/Test/.
<?php
namespace Webkul\Test\Controller\Adminhtml\Test;
class InlineEdit extends \Magento\Backend\App\Action
{
protected $jsonFactory;
public function __construct(
\Magento\Backend\App\Action\Context $context,
\Magento\Framework\Controller\Result\JsonFactory $jsonFactory
) {
parent::__construct($context);
$this->jsonFactory = $jsonFactory;
}
public function execute()
{
/** @var \Magento\Framework\Controller\Result\Json $resultJson */
$resultJson = $this->jsonFactory->create();
$error = false;
$messages = [];
if ($this->getRequest()->getParam('isAjax')) {
$postItems = $this->getRequest()->getParam('items', []);
if (!count($postItems)) {
$messages[] = __('Please correct the data sent.');
$error = true;
} else {
foreach (array_keys($postItems) as $entityId) {
/** load your model to update the data */
$model = $this->_objectManager->create('Test\Test\Model\test')->load($entityId);
try {
$model->setData(array_merge($model->getData(), $postItems[$entityId]));
$model->save();
} catch (\Exception $e) {
$messages[] = "[Error:] {$e->getMessage()}";
$error = true;
}
}
}
}
return $resultJson->setData([
'messages' => $messages,
'error' => $error
]);
}
}
You can save the grid-updated data into the database.
This example is for the single column. You can implement it in several columns as per your requirements.
Hope it will help you. Thank you.
Be the first to comment.