3

I've created custom Admin Grid with Default Magento's Customer Collection.

I am sharing my code for this.

Vendor/Module/etc/di.xml

<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
 <arguments>
 <argument name="collections" xsi:type="array">
 <item name="credit_grid_listing_data_source" xsi:type="string">Magento\Customer\Model\ResourceModel\Customer\Collection</item>
 </argument>
 </arguments>
</type>
<virtualType name="Magento\Customer\Model\ResourceModel\Customer\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
 <arguments>
 <argument name="mainTable" xsi:type="string">customer_entity</argument>
 <argument name="resourceModel" xsi:type="string">Magento\Customer\Model\ResourceModel\Customer</argument>
 </arguments>
</virtualType>
<preference for="Vendor\Module\Api\Data\GridInterface" type="Vendor\Module\Model\Grid" />

Below is Layout for adminhtml

<body>
 <referenceContainer name="content">
 <uiComponent name="credit_grid_listing"/>
 </referenceContainer>
</body>

../layout/credit_grid_addrow.xml

 <referenceContainer name="content">
 <block class="Vednor\Module\Block\Adminhtml\Grid\AddRow" name="add_row" />
 </referenceContainer>

ui_component/credit_grid_listing.xml

<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Ui/etc/ui_configuration.xsd">
<argument name="data" xsi:type="array">
 <item name="js_config" xsi:type="array">
 <item name="provider" xsi:type="string">credit_grid_listing.credit_grid_listing_data_source</item>
 <item name="deps" xsi:type="string">credit_grid_listing.credit_grid_listing_data_source</item>
 </item>
 <item name="spinner" xsi:type="string">grid_records_columns</item>
 <item name="buttons" xsi:type="array">
 <item name="add" xsi:type="array">
 <item name="name" xsi:type="string">add</item>
 <item name="label" xsi:type="string" translate="true">Add New Row</item>
 <item name="class" xsi:type="string">primary</item>
 <item name="url" xsi:type="string">*/*/addrow</item>
 </item>
 </item>
</argument>
<dataSource name="credit_grid_listing_data_source">
 <argument name="dataProvider" xsi:type="configurableObject">
 <argument name="class" xsi:type="string">Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider</argument>
 <argument name="name" xsi:type="string">credit_grid_listing_data_source</argument>
 <argument name="primaryFieldName" xsi:type="string">entity_id</argument>
 <argument name="requestFieldName" xsi:type="string">id</argument>
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="update_url" xsi:type="url" path="mui/index/render"/>
 </item>
 </argument>
 </argument>
 <argument name="data" xsi:type="array">
 <item name="js_config" xsi:type="array">
 <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
 </item>
 </argument>
</dataSource>
<container name="listing_top">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="template" xsi:type="string">ui/grid/toolbar</item>
 <item name="stickyTmpl" xsi:type="string">ui/grid/sticky/toolbar</item>
 </item>
 </argument>
 <bookmark name="bookmarks"/>
 <columnsControls name="columns_controls"/>
 <filters name="listing_filters">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="columnsProvider" xsi:type="string">credit_grid_listing.credit_grid_listing.grid_records_columns</item>
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">credit_grid_listing.credit_grid_listing.listing_top.bookmarks</item>
 <item name="namespace" xsi:type="string">current.filters</item>
 </item>
 <item name="templates" xsi:type="array">
 <item name="filters" xsi:type="array">
 <item name="select" xsi:type="array">
 <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
 <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
 </item>
 </item>
 </item>
 <item name="childDefaults" xsi:type="array">
 <item name="provider" xsi:type="string">credit_grid_listing.credit_grid_listing.listing_top.listing_filters</item>
 <item name="imports" xsi:type="array">
 <item name="visible" xsi:type="string">credit_grid_listing.credit_grid_listing.grid_records_columns.${ $.index }:visible</item>
 </item>
 </item>
 </item>
 <item name="observers" xsi:type="array">
 <item name="column" xsi:type="string">column</item>
 </item>
 </argument>
 </filters>
 <massaction name="listing_massaction">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="selectProvider" xsi:type="string">credit_grid_listing.credit_grid_listing.grid_records_columns.ids</item>
 <item name="component" xsi:type="string">Magento_Ui/js/grid/tree-massactions</item>
 <item name="indexField" xsi:type="string">id</item>
 </item>
 </argument>
 <!-- Mass actions which you want to add in your grid-->
 <action name="delete">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="type" xsi:type="string">delete</item>
 <item name="label" xsi:type="string" translate="true">Delete</item>
 <item name="url" xsi:type="url" path="grid/grid/massdelete"/>
 <item name="confirm" xsi:type="array">
 <item name="title" xsi:type="string" translate="true">Delete</item>
 <item name="message" xsi:type="string" translate="true">Do you want to delete selected row record?</item>
 </item>
 </item>
 </argument>
 </action>
 </massaction>
 <paging name="listing_paging">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">credit_grid_listing.credit_grid_listing.listing_top.bookmarks</item>
 <item name="namespace" xsi:type="string">current.paging</item>
 </item>
 <item name="selectProvider" xsi:type="string">credit_grid_listing.credit_grid_listing.grid_records_columns.ids</item>
 </item>
 </argument>
 </paging>
</container>
<columns name="grid_records_columns">
 <selectionsColumn name="ids">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="indexField" xsi:type="string">entity_id</item>
 <item name="sorting" xsi:type="string">desc</item>
 <item name="sortOrder" xsi:type="number">0</item>
 </item>
 </argument>
 </selectionsColumn>
 <column name="firstname">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">textRange</item>
 <item name="label" xsi:type="string" translate="true">firstname</item>
 </item>
 </argument>
 </column>
 <column name="lastname" >
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">false</item>
 <item name="label" xsi:type="string" translate="true">lastname</item>
 </item>
 </argument>
 </column>
 <actionsColumn name="actions" class="Vendor\Module\Ui\Component\Listing\Grid\Column\Action">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="resizeEnabled" xsi:type="boolean">false</item>
 <item name="resizeDefaultWidth" xsi:type="string">107</item>
 <item name="indexField" xsi:type="string">id</item>
 </item>
 </argument>
 </actionsColumn>
</columns>

../Model/ResourceModel/Grid.php

protected function _construct()
{
 $this->_init('customer_entity', 'entity_id');
}

../Model/Grid.php

protected function _construct()
{
 $this->_init('Vendor\Module\Model\ResourceModel\Grid');
}
public function getEntityId()
{
 return $this->getData(self::ENTITY_ID);
}
public function setEntityId($entityId)
{
 return $this->setData(self::ENTITY_ID, $entityId);
}
public function getFirstname()
{
 return $this->getData(self::FIRSTNAME);
}
public function setFirstname($firstName)
{
 return $this->setData(self::FIRSTNAME, $firstName);
}
public function getLastname()
{
 return $this->getData(self::LASTNAME);
}
public function setLastname($lastName)
{
 return $this->setData(self::LASTNAME, $lastName);
}

../Controller/Adminhtml/Grid/AddRow.php

public function execute()
{
 $rowId = (int) $this->getRequest()->getParam('id'); 
 $rowData = $this->gridFactory->create();
 if ($rowId) {
 $rowData = $rowData->load($rowId);
 $rowTitle = $rowData->getFirstname().'&nbsp;'.$rowData->getLastname();
 if (!$rowData->getFirstName()) {
 $this->messageManager->addError(__('row data no longer exist.'));
 $this->_redirect('credit/grid/rowdata');
 return;
 }
 }
 $this->coreRegistry->register('row_data', $rowData);
 $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
 $title = $rowId ? __('Edit Customer ').$rowTitle : __('Add Row Data');
 $resultPage->getConfig()->getTitle()->prepend($title);
 return $resultPage;
}

../Block/Adminhtml/Grid/Edit/Form.php

protected function _prepareForm()
{
 $id = $this->request->getParam('id');
 $dateFormat = $this->_localeDate->getDateFormat(\IntlDateFormatter::SHORT);
 $model = $this->_coreRegistry->registry('row_data');
 //print_r($model->getData()); exit;
 $form = $this->_formFactory->create(
 ['data' => [
 'id' => 'edit_form',
 'enctype' => 'multipart/form-data',
 'action' => $this->getData('action'),
 'method' => 'post'
 ]
 ]
 );
 $form->setHtmlIdPrefix('troogrid__');
 if ($model->getFirstName()) {
 $fieldset = $form->addFieldset(
 'base_fieldset',
 ['legend' => __('Edit Customer Social Details'), 'class' => 'fieldset-wide']
 );
 $fieldset->addField('entity_id', 'hidden', ['name' => 'entity_id']);
 } else {
 $fieldset = $form->addFieldset(
 'base_fieldset',
 ['legend' => __('Add Row Data'), 'class' => 'fieldset-wide']
 );
 }
 $fieldset->addField(
 'First Name',
 'text',
 [
 'name' => 'firstname',
 'label' => __('First Name'),
 'value' => 'Data',
 'id' => 'firstname',
 'title' => __('First Name'),
 'class' => 'required-entry',
 'required' => true
 ]
 );
 $fieldset->addField(
 'Last Name',
 'text',
 [
 'name' => 'lastname',
 'label' => __('Last Name'),
 'id' => 'lastname',
 'title' => __('Last Name'),
 'class' => 'required-entry',
 'required' => true,
 ]
 );
 $form->setValues($model->getData());
 $form->setUseContainer(true);
 $this->setForm($form);
 return parent::_prepareForm();
 //return $form;
}

Now, If i am printing model than it will return me all details but when i edit row data isn't filling up with form.

Is there anything i am missing with this ??

Also Model can also able to update data.

but fails to render data.

Teja Bhagavan Kollepara
3,8275 gold badges33 silver badges69 bronze badges
asked May 21, 2018 at 9:44

1 Answer 1

2

Your Code seems to be correct, But i found one issue with your code that is in your Form.

Change it to below than check it should work. It will Also resolves your problem you described here : Magetno 2 : Get Customer FirstName and LastName with Custom Resource Model

$fieldset->addField(
 'firstname', // Update
 'text',
 [
 'name' => 'firstname',
 'label' => __('First Name'),
 'value' => 'Data',
 'id' => 'firstname',
 'title' => __('First Name'),
 'class' => 'required-entry',
 'required' => true
 ]
);
$fieldset->addField(
 'lastname', // Change Here
 'text',
 [
 'name' => 'lastname',
 'label' => __('Last Name'),
 'id' => 'lastname',
 'title' => __('Last Name'),
 'class' => 'required-entry',
 'required' => true,
 ]
);

Clear Cache and Check.

answered May 29, 2018 at 9:22
1
  • Thanks It worked, I had to switch to php form. :( But now it worked .!! Commented May 29, 2018 at 9:46

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.