Что бы появилась кнопка добавления нужно добавить опцию ALLOW_ADD
и для возможности удаления ALLOW_DELETE

ниже приведен пример с добавлением собственной функции удаления элемента,
в данном примере это приведено опять же из-за ограничений \Bitrix\Iblock\ElementTable
если достаточно стандартной функции Bitrix\Main\ORM\Data\DataManager::delete
устанавливать свой обработчик удаления не требуется.

<?php

require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php');

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;

Loc::loadMessages(__FILE__);

Loader::includeModule("iblock");
Loader::includeModule("devbx.core");

$IBLOCK_ID = intval(\Bitrix\Main\Context::getCurrent()->getRequest()->get('IBLOCK_ID'));

$list = new DevBx\Core\Admin\AdminList('iblock', '\Bitrix\Iblock\ElementTable', array(
    'ALLOW_EDIT' => 'Y',
    'ALLOW_ADD' => 'Y',
    'ALLOW_DELETE' => 'Y',
    'HEADER_FIELDS' => array(
        'ID',
        'TIMESTAMP_X',
        'MODIFIED_BY',
        'DATE_CREATE',
        'CREATED_BY',
        'ACTIVE',
        'ACTIVE_FROM',
        'ACTIVE_TO',
        'SORT',
        'CODE',
        'NAME',
    ),
    'EDIT_FIELDS' => $arEditFields,
    'FILTER_HEADER' => '<input type=hidden name="IBLOCK_ID" value="' . $IBLOCK_ID . '">',
));

$list->addFileEditParams('&IBLOCK_ID=' . $IBLOCK_ID);
$list->setActionGroupAddParams('&IBLOCK_ID=' . $IBLOCK_ID);

$list->setFilterFields(array(
    'ID' => 'RANGE',
    'TIMESTAMP_X' => 'RANGE',
    'DATE_CREATE' => 'RANGE',
    'ACTIVE',
    'ACTIVE_FROM' => 'RANGE',
    'ACTIVE_TO' => 'RANGE',
    'SORT' => 'RANGE',
    'CODE',
    'NAME',
));

$list->setCallbackApplyFilter(function (&$arFilter, &$arFilterValues) use ($IBLOCK_ID) {
    $arFilter['IBLOCK_ID'] = $IBLOCK_ID;
});

$list->setUpdateFunction(function ($ID, $arFields) {

    $result = new \Bitrix\Main\Entity\UpdateResult();

    $el = new CIBlockElement();

    if (!$el->Update($ID, $arFields)) {
        $result->addError(new \Bitrix\Main\Entity\EntityError($el->LAST_ERROR));
    }

    return $result;
});

$list->setCallbackAction('delete', function (\DevBx\Core\Admin\AdminList $list, $action, $arID, &$offset) {

    global $APPLICATION;

    $max_execution_time = 10;

    $cnt = count($arID);
    for (; $offset < $cnt; $offset++) {
        $ID = $arID[$offset];

        if (!CIBlockElement::Delete($ID)) {
            $ex = $APPLICATION->GetException();
            $list->getAdminList()->AddGroupError($ex->GetString(), $ID);
        }

        if ($max_execution_time > 0 && (microtime(true) - START_EXEC_TIME) > $max_execution_time)
            return true;
    }

    return false;
});

$list->display();





 Своя функция обновления данных (setUpdateFunction) | Описание курса | DevBx\Core\Admin\AdminEdit