We have this problem all the time and there are various ways around it. I don't really know the "recommended" way, but I have solved it in a couple of ways, which I will describe in detail...because there was a lot of learning to be done.
If you use a template for TotalAmount that is based on the values for the other columns, it does not update immediately when those other columns change. It *will* get updated when the grid is rebound, but that is too late for a nice UX.
You can bind to the grid's save event which will fire when you leave the cells.
Here you can recalculate your new TotalAmount and push it into the model.
But, there are issues:
1. if TotalAmount is marked as not editable, you cannot use model.set("TotalAmount", newValue). You can update the value directly instead, model.TotalAmount = newValue, but this will not update the displayed value. You can then force a grid refresh to update the display, grid.refresh(). At this point, you value has been updated in the model AND in the UI but the forced refresh will cause the grid to lose it's state, i.e. the selected row/cell, etc, which breaks the flow of the UX.
I do not recommend this way. Instead of refreshing the grid, you can also just push the updated value into the cell markup directly...I have done this but also do not recommend it.
2. if TotalAmount is marked as editable, you can use model.set() and update right away, but now the cell will show an editor, which you do not want.
I have 2 ways to get around this:
2.1 Hide the editor in the edit event and refocus to maintain the row/cell focus: http://dojo.telerik.com/@Stephen/ekIjU. This way gives you a lot of flexibility, i.e. if the cell is conditionally editable you can choose to hide or keep the editor as conditions change.
2.2 Implement a custom editor for the field that just shows the value instead of an actual editor: http://dojo.telerik.com/@Stephen/UYoju. This is probably the way to go if you field is never editable.