0

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>
  • show your grid code – Priyank Apr 26 '17 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 Apr 26 '17 at 6:25
  • have you created your grid using ui_component ? then post that code the error seems to be there. – Priyank Apr 26 '17 at 6:30
  • Ok. I have edited the quetion. – Prince Apr 26 '17 at 6:36
  • show your layout file how you have displayed your grid. – Priyank Apr 26 '17 at 6:38
0

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>
| improve this answer | |
  • Thanks @userpk, it works ! There was also some issue in /Ui/Component/DataProvider.php file. After edit, sorting problem is solved. – Prince Apr 26 '17 at 7:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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