I have create custom grid in customer information.
Create export functionality in custom admin grid without template file and ui component
Meetanshi\OrderHistory\view\adminhtml\layout\module_index_custom.xml
<?xml version="1.0"?>
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd">
<container name="root" label="Root">
<block class="Vendor\Module\Block\Adminhtml\Edit\Tab\View\Demo" name="custom_tabs" />
</container>
</layout>
Vendor\Module\Block\Adminhtml\Edit\Tab\View\Demo.php
<?php
namespace Vendor\Module\Block\Adminhtml\Edit\Tab\View;
use Magento\Backend\Block\Template\Context;
use Magento\Backend\Helper\Data;
use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
use Magento\Framework\Registry;
class Demo extends \Magento\Backend\Block\Widget\Grid\Extended
{
protected $coreRegistry;
protected $orderFactory;
public function __construct(
Context $context,
\Magento\Framework\App\Request\Http $request,
Data $backendHelper,
CollectionFactory $orderFactory,
Registry $coreRegistry,
array $data = []
) {
$this->request = $request;
$this->orderFactory = $orderFactory;
$this->coreRegistry = $coreRegistry;
parent::__construct($context, $backendHelper, $data);
}
protected function _construct()
{
parent::_construct();
$this->setId('custom_order_grid');
$this->setUseAjax(true);
}
protected function _prepareCollection()
{
$collection = $this->orderFactory->create()->addFieldToSelect(
'increment_id'
)->addFieldToSelect(
'status'
)->addFieldToSelect(
'total_qty_ordered'
)->addFieldToSelect(
'base_discount_amount'
)->addFieldToSelect(
'subtotal'
)->addFieldToSelect(
'grand_total'
)->addFieldToFilter(
'customer_id',
$this->_request->getParam('id')
);
$this->setCollection($collection);
return parent::_prepareCollection();
}
protected function _prepareColumns()
{
$this->addColumn(
'increment_id',
[
'header' => __('Order ID'),
'sortable' => true,
'index' => 'increment_id'
]
);
$this->addColumn(
'status',
[
'header' => __('Status'),
'index' => 'status'
]
);
return parent::_prepareColumns();
}
public function getGridUrl()
{
return $this->getUrl('module/*/custom', ['_current' => true]);
}
}