1

I have created one module about product question.

Issue: When I click on any column for sort, it gives result once or twice.

enter image description here

But when I click three times, it gives the grid with all same data.

enter image description here

Same issue as, Magento Grid Component not Sorting Correctly

But my di.xml is different than above question's answer so I can't figure out.

My di.xml file is as below:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<type name="Magento\Backend\Controller\Adminhtml\Index\GlobalSearch">
 <arguments>
 <argument name="searchModules" xsi:type="array">
 <item name="prince_productquestions_question" xsi:type="array">
 <item name="class" xsi:type="string">Prince\Productquestions\Model\Adminhtml\Search\Question</item>
 <item name="acl" xsi:type="string">Prince_Productquestions::question</item>
 </item>
 </argument>
 </arguments>
</type>
<virtualType name="PrinceProductquestionsGirdFilterPool" type="Magento\Framework\View\Element\UiComponent\DataProvider\FilterPool">
 <arguments>
 <argument name="appliers" xsi:type="array">
 <item name="regular" xsi:type="object">Magento\Framework\View\Element\UiComponent\DataProvider\RegularFilter</item>
 <item name="fulltext" xsi:type="object">Magento\Framework\View\Element\UiComponent\DataProvider\FulltextFilter</item>
 </argument>
 </arguments>
</virtualType>
<type name="Prince\Productquestions\Model\ResourceModel\Question\Grid\Collection">
 <arguments>
 <argument name="mainTable" xsi:type="string">prince_productquestions_question</argument>
 <argument name="eventPrefix" xsi:type="string">prince_productquestions_question_grid_collection</argument>
 <argument name="eventObject" xsi:type="string">question_grid_collection</argument>
 <argument name="resourceModel" xsi:type="string">Prince\Productquestions\Model\ResourceModel\Question</argument>
 </arguments>
</type>
<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
 <arguments>
 <argument name="collections" xsi:type="array">
 <item name="prince_productquestions_question_listing_data_source" xsi:type="string">Prince\Productquestions\Model\ResourceModel\Question\Grid\Collection</item>
 </argument>
 </arguments>
</type>
 </config>

Where I am doing wrong ?

Thanks in advanced !

EDIT

File Name : prince_productquestions_question_listing.xml

Location : Prince/Productquestions/view/adminhtml/ui_component/

<?xml version="1.0"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<argument name="data" xsi:type="array">
 <item name="js_config" xsi:type="array">
 <item name="provider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing_data_source</item>
 <item name="deps" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing_data_source</item>
 </item>
 <item name="spinner" xsi:type="string">prince_productquestions_question_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 Question</item>
 <item name="class" xsi:type="string">primary</item>
 <item name="url" xsi:type="string">*/*/new</item>
 </item>
 </item>
</argument>
<dataSource name="prince_productquestions_question_listing_data_source">
 <argument name="dataProvider" xsi:type="configurableObject">
 <argument name="class" xsi:type="string">Prince\Productquestions\Ui\Component\DataProvider</argument>
 <argument name="name" xsi:type="string">prince_productquestions_question_listing_data_source</argument>
 <argument name="primaryFieldName" xsi:type="string">question_id</argument>
 <argument name="requestFieldName" xsi:type="string">question_id</argument>
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
 <item name="update_url" xsi:type="url" path="mui/index/render"/>
 <item name="storageConfig" xsi:type="array"> 
 <item name="indexField" xsi:type="string">question_id</item> 
 </item>
 </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>
<listingToolbar name="listing_top">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="sticky" xsi:type="boolean">true</item>
 </item>
 </argument>
 <bookmark name="bookmarks">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="storageConfig" xsi:type="array">
 <item name="namespace" xsi:type="string">prince_productquestions_question_listing</item>
 </item>
 </item>
 </argument>
 </bookmark>
 <component name="columns_controls">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="columnsData" xsi:type="array">
 <item name="provider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.prince_productquestions_question_columns</item>
 </item>
 <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/columns</item>
 <item name="displayArea" xsi:type="string">dataGridActions</item>
 </item>
 </argument>
 </component>
 <exportButton name="export_button">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="selectProvider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.prince_productquestions_question_columns.ids</item>
 </item>
 </argument>
 </exportButton>
 <filterSearch name="fulltext">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="provider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing_data_source</item>
 <item name="chipsProvider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.listing_top.listing_filters_chips</item>
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.listing_top.bookmarks</item>
 <item name="namespace" xsi:type="string">current.search</item>
 </item>
 </item>
 </argument>
 </filterSearch>
 <filters name="listing_filters">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="columnsProvider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.prince_productquestions_question_columns</item>
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_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">prince_productquestions_question_listing.prince_productquestions_question_listing.listing_top.listing_filters</item>
 <item name="imports" xsi:type="array">
 <item name="visible" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.prince_productquestions_question_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">prince_productquestions_question_listing.prince_productquestions_question_listing.prince_productquestions_question_columns.ids</item>
 <item name="indexField" xsi:type="string">question_id</item>
 </item>
 </argument>
 <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="prince_productquestions/question/massDelete"/>
 <item name="confirm" xsi:type="array">
 <item name="title" xsi:type="string" translate="true">Delete Questions</item>
 <item name="message" xsi:type="string" translate="true">Are you sure you wan't to delete selected Questions?</item>
 </item>
 </item>
 </argument>
 </action>
 <action name="edit">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="type" xsi:type="string">edit</item>
 <item name="label" xsi:type="string" translate="true">Edit</item>
 <item name="callback" xsi:type="array">
 <item name="provider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.prince_productquestions_question_columns_editor</item>
 <item name="target" xsi:type="string">editSelected</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">prince_productquestions_question_listing.prince_productquestions_question_listing.listing_top.bookmarks</item>
 <item name="namespace" xsi:type="string">current.paging</item>
 </item>
 <item name="selectProvider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.prince_productquestions_question_columns.ids</item>
 </item>
 </argument>
 </paging>
</listingToolbar>
<columns name="prince_productquestions_question_columns">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.listing_top.bookmarks</item>
 <item name="namespace" xsi:type="string">current</item>
 </item>
 <item name="editorConfig" xsi:type="array">
 <item name="selectProvider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.prince_productquestions_question_columns.ids</item>
 <item name="enabled" xsi:type="boolean">true</item>
 <item name="indexField" xsi:type="string">question_id</item>
 <item name="clientConfig" xsi:type="array">
 <item name="saveUrl" xsi:type="url" path="prince_productquestions/question/inlineEdit"/>
 <item name="validateBeforeSave" xsi:type="boolean">false</item>
 </item>
 </item>
 <item name="childDefaults" xsi:type="array">
 <item name="fieldAction" xsi:type="array">
 <item name="provider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.prince_productquestions_question_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>
 </item>
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">prince_productquestions_question_listing.prince_productquestions_question_listing.listing_top.bookmarks</item>
 <item name="root" xsi:type="string">columns.${ $.index }</item>
 <item name="namespace" xsi:type="string">current.${ $.storageConfig.root}</item>
 </item>
 </item>
 </item>
 </argument>
 <selectionsColumn name="ids">
 <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">55</item>
 <item name="indexField" xsi:type="string">question_id</item>
 </item>
 </argument>
 </selectionsColumn>
 <column name="question_id">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">textRange</item>
 <item name="sorting" xsi:type="string">asc</item>
 <item name="label" xsi:type="string" translate="true">ID</item>
 </item>
 </argument>
 </column>
 <column name="product_id">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">text</item>
 <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>
 </item>
 <item name="label" xsi:type="string" translate="true">Product ID</item>
 </item>
 </argument>
 </column>
 <column name="name">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">text</item>
 <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>
 </item>
 <item name="label" xsi:type="string" translate="true">Username</item>
 <item name="dataType" xsi:type="string">text</item>
 </item>
 </argument>
 </column>
 <column name="email">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">text</item>
 <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>
 </item>
 <item name="label" xsi:type="string" translate="true">Email</item>
 <item name="dataType" xsi:type="string">text</item>
 </item>
 </argument>
 </column>
 <column name="subject">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">text</item>
 <item name="editor" xsi:type="string">text</item>
 <item name="label" xsi:type="string" translate="true">Subject</item>
 <item name="dataType" xsi:type="string">text</item>
 </item>
 </argument>
 </column>
 <column name="question">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">text</item>
 <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>
 </item>
 <item name="label" xsi:type="string" translate="true">Question</item>
 <item name="dataType" xsi:type="string">text</item>
 </item>
 </argument>
 </column>
 <column name="is_private">
 <argument name="data" xsi:type="array">
 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">select</item>
 <item name="editor" xsi:type="array">
 <item name="editorType" xsi:type="string">select</item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 <item name="label" xsi:type="string" translate="true">Is Private</item>
 <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
 <item name="dataType" xsi:type="string">select</item>
 </item>
 </argument>
 </column>
 <column name="status">
 <argument name="data" xsi:type="array">
 <item name="options" xsi:type="object">Prince\Productquestions\Model\Question\Source\Status</item>
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">select</item>
 <item name="editor" xsi:type="array">
 <item name="editorType" xsi:type="string">select</item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 <item name="label" xsi:type="string" translate="true">Status</item>
 <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
 <item name="dataType" xsi:type="string">select</item>
 </item>
 </argument>
 </column>
 <column name="posted_on">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">dateRange</item>
 <item name="editor" xsi:type="array">
 <item name="editorType" xsi:type="string">date</item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 <item name="label" xsi:type="string" translate="true">Posted On</item>
 <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
 <item name="dataType" xsi:type="string">date</item>
 </item>
 </argument>
 </column>
 <column name="created_at" class="Magento\Ui\Component\Listing\Columns\Date">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">dateRange</item>
 <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
 <item name="dataType" xsi:type="string">date</item>
 <item name="label" xsi:type="string" translate="true">Created</item>
 </item>
 </argument>
 </column>
 <column name="updated_at" class="Magento\Ui\Component\Listing\Columns\Date">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">dateRange</item>
 <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
 <item name="dataType" xsi:type="string">date</item>
 <item name="label" xsi:type="string" translate="true">Modified</item>
 </item>
 </argument>
 </column>
 <actionsColumn name="actions" class="Prince\Productquestions\Ui\Component\Listing\Column\QuestionActions">
 <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">question_id</item>
 </item>
 </argument>
 </actionsColumn>
</columns>
</listing>
asked Apr 26, 2017 at 5:39
6
  • show your grid code Commented Apr 26, 2017 at 6:19
  • I have read that sorting is default in Admin grid columns. If not, where should that grid code is. In which path, grid code should be ? So I can find that file. Commented Apr 26, 2017 at 6:25
  • have you created your grid using ui_component ? then post that code the error seems to be there. Commented Apr 26, 2017 at 6:30
  • Ok. I have edited the quetion. Commented Apr 26, 2017 at 6:36
  • show your layout file how you have displayed your grid. Commented Apr 26, 2017 at 6:38

1 Answer 1

1

I assume You are joining product collection with your custom collection which is causing issue

try placing product_id in your storegeconfig and try

 <item name="config" xsi:type="array">
 <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
 <item name="update_url" xsi:type="url" path="mui/index/render"/>
 <item name="storageConfig" xsi:type="array">
 <!-- Change this --> 
 <item name="indexField" xsi:type="string">product_id</item> 
 </item>
 </item>
</argument>
answered Apr 26, 2017 at 6:57
1
  • Thanks @userpk, it works ! There was also some issue in /Ui/Component/DataProvider.php file. After edit, sorting problem is solved. Commented Apr 26, 2017 at 7:16

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.