I was in bad need to RowClosing, RowClosed, RowOpening, and RowOpened client side events (I hope these will be added to a future release), so I tried to implement my own.
I planned to handle the respective BatchEdit events. They're called for each cell, so I need to detect their call on first and last editable cells of a row to fire the proper event.
Here are some of my code:
!col.get_readOnly() && col.get_visible();
lastVisibleEditableColumn = _.findLast(gridColumnsSortedByDisplayIndex, _findVisibleEditableColumn);
(lastVisibleEditableColumn && lastVisibleEditableColumn.get_uniqueName() == args.get_columnUniqueName())
The event handler uses lo dash findLast function
to find the last editable column. The callback _findVisibleEditableColumn uses the ReadOnly property to determine that the column is editable. This theoretically looks good. But I found that this doesn't cover a real scenario.
I had a grid which had the last column a TemplateColumn without edit or insert templates specified. This column passed the check. Its ReadOnly property returns false but the BatchEditClosed event is not called for it.
I examined the Telerik.Web.UI.GridColumn objects in the inspector and found that they have a private _data object which has the property Editable.
get_readOnly property code is as follows:
It doesn't use the _data.Editable property.
At last I modified my filter function as follows:
!col.get_readOnly() && col.get_visible() && col._data.Editable;
This seems to be working well. But is this the right solution? What's the reliable method to determine if a column is editable?