This code works 100% to hide delete button for both before and after opening row on child table
frappe.ui.form.on('Sales Order', {
refresh(frm) {
// your code here
$('*[data-fieldname="items"]').find('.grid-remove-rows').hide();
},
});
frappe.ui.form.on('Sales Order Item', {
refresh(frm) {
// your code here
},
form_render(frm, cdt, cdn){
frm.fields_dict.items.grid.wrapper.find('.grid-delete-row').hide();
frm.fields_dict.items.grid.wrapper.find('.grid-duplicate-row').hide();
frm.fields_dict.items.grid.wrapper.find('.grid-move-row').hide();
frm.fields_dict.items.grid.wrapper.find('.grid-append-row').hide();
frm.fields_dict.items.grid.wrapper.find('.grid-insert-row-below').hide();
frm.fields_dict.items.grid.wrapper.find('.grid-insert-row').hide();
},
});