ej.grids.Grid.Inject(ej.grids.Edit, ej.grids.Toolbar); this.#orderItemsGrid = new ej.grids.Grid({ dataSource: this.#currentOrder != null && this.#currentOrder.orderLines.length > 0 ? this.#currentOrder.orderLines : [], selectionSettings: { mode: 'Row', type: 'Single' }, toolbar: ['Add', 'Edit', 'Delete', 'Update', 'Cancel'], editSettings: { allowEditing: true, allowAdding: true, allowDeleting: true }, columns: [ { field: 'id', headerText: 'id', width: 120, type: 'string', visible: false, allowEditing: false }, { field: 'productId', headerText: 'productId', width: 120, type: 'numeric', visible: false, allowEditing: false }, { field: 'code', headerText: 'Code', width: 120, type: 'string', isPrimaryKey: true, allowEditing: false }, { field: 'quantity', headerText: 'Quantity', width: 120, editType: 'numericedit', edit: { params: { validateDecimalOnType: true, //I need to set dynamically decimals: 0, min: 1, max: 100, } }, validationRules: { required: true, min: 1, max: 1000 }, textAlign: 'Right' }, { field: 'unit', headerText: 'UoM', width: 120, type: 'string', visible: true, allowEditing: false }, { field: 'category', width: 140, headerText: 'Category', type: 'string', allowEditing: false }, { field: 'name', width: 140, headerText: 'Product', type: 'string', allowEditing: false }, { field: 'price', headerText: 'Price', width: 120, type: 'string', allowEditing: false }, { headerText: 'Notes', width: 120, commands: [{ buttonOption: { content: 'Add', cssClass: 'e-primary', click: orderItemGrid.openDialog } }] } ], allowPaging: true, pageSettings: { pageSize: 10 }, actionBegin: (args) => { if (args.requestType === 'add') { args.cancel = true; tileView.getCategories(); tileView.showDialog(); } }, rowDataBound: (args) => { //how do I setup numericedit }, beforeDataBound: (args) => { //how do I setup numericedit } });