Hi Radzen,
I would like to show or hide the Delete icon on a data grid, not globally on or off for the entire grid, but for each individual record in the grid… I tried to play with the AllowDelete property without success…
Is it possible?
Thanks
Hi Radzen,
I would like to show or hide the Delete icon on a data grid, not globally on or off for the entire grid, but for each individual record in the grid… I tried to play with the AllowDelete property without success…
Is it possible?
Thanks
Hi @semafox,
This is possible but not with the built-in delete button (which is global). The following should work though:
${data}
to access the current data item. For example something like this ${data.CanDelete == false}
${data}
to pass the current data item ID. For example ${data.ID}
This works great, thanks!
In another data grid I was also trying to have a button that sets a foreign key of a record to null when I click it.
In the click event of the button i do the following:
What am I doing wrong? On the Server side the PatchDevice method gets called with key parameter which has the correct value, but the patch parameter is null…
This sounds correct. Can you check with the browser’s developer tools what’s getting posted when you invoke the updateDevice method? Check the Network tab - the HTTP request should contain the current data item serialized as JSON.
Just tested similar scenario but things seem to work fine. I suspect that at server-side OData fails for some reason to construct a valid Device class instance. You can try something a bit different - invoke updateDevice with ${data.DeviceID}
and {PersonID: null}
as parameters. Setting PersonID via Execute JavaScript code isn’t necessary. And one more thing - you should always define a Then event handler of an Invoke - otherwise the HTTP request won’t execute (this is a quirk of the way Angular deals with HTTP requests).
Hi Korshev,
I tried to replace {data} by {PersonID: null} as the second parameter of the updateDevice data source method, but I get the following error:
https://www.screencast.com/t/R988x2wwm.
Using {data} as the 2nd parameter, this is what I did:
https://www.screencast.com/t/Kn2chWZmGG
And this is the result I get (notice that the patch object is null)
https://www.screencast.com/t/EEZGEHcFI2
if that helps:
https://www.screencast.com/t/dEKKO3y0rjV
Thanks!
Did you try with {PersonID:null}
or ${PersonID: null}
? You should try the former.
I investigated why ${data} doesn’t work and the item is null server-side. I think it is because the payload contains expanded entities which OData chockes on for some reason. If sending only {PersonID: null}
does not work you can try something like this:
let device = Object.assign({}, ${data});
device.PersonID = null;
delete device.Person;
If there are other expanded entities you should delete them too e.g. delete device.Type
What this code does is to clone the original data item and delete the expanded entities and set the PersonID to null.
You are right, I was probably using ${PersonID: null}, but using {PersonID:null} did not work either. I got the following error message in the output window:
ng-cli:
ERROR in src/app/edit-person/edit-person-generated.component.ts(152,45): error TS2345: Argument of type ‘{ PersonID: null; }’ is not assignable to parameter of type ‘Device’.
Property ‘DeviceID’ is missing in type ‘{ PersonID: null; }’.
Trying to provide the missing properties did not work either…
On the other hand, your second solution works when I delete all expanded entities! So thank you! It would be nice though to be able to operate directly from ${data} in such a scenario, just more intuitive & user-friendly…
On the cosmetic side, it would be nice to make the Code field multi lines in the Execute JavaScript handler type.
Kind regards
Hi @semadox,
Indeed having to delete the expanded properties is not very convenient. We will try to handle it internally.
Having the ability for multiline code editing is on the TODO list! Will try to handle that soon.
Best,
Atanas