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>
6
  • show your grid code
    – Priyank
    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.
    – Prince
    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.
    – Priyank
    Commented Apr 26, 2017 at 6:30
  • Ok. I have edited the quetion.
    – Prince
    Commented Apr 26, 2017 at 6:36
  • show your layout file how you have displayed your grid.
    – Priyank
    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>
1
  • Thanks @userpk, it works ! There was also some issue in /Ui/Component/DataProvider.php file. After edit, sorting problem is solved.
    – Prince
    Commented Apr 26, 2017 at 7:16

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.