This is a migrated thread and some comments may be shown as answers.

How to reliably determine if a GridColumn is editable?

1 Answer 58 Views
Grid
This is a migrated thread and some comments may be shown as answers.
أشرف
Top achievements
Rank 1
أشرف asked on 09 Jan 2014, 04:41 PM
Greetings,

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:

function _findVisibleEditableColumn(col)
    {
        return !col.get_readOnly() && col.get_visible();
    }
 
grid.add_batchEditClosed(function (sender, args)
        {
            var lastVisibleEditableColumn = _.findLast(gridColumnsSortedByDisplayIndex, _findVisibleEditableColumn);
 
            if(lastVisibleEditableColumn && lastVisibleEditableColumn.get_uniqueName() == args.get_columnUniqueName())
                grid.raise_batchEditRowClosed(args);
        });

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:

get_readOnly:function(){return(typeof(this._data.ReadOnly)!="undefined")?true:false;
}

It doesn't use the _data.Editable property.

At last I modified my filter function as follows:

function _findVisibleEditableColumn(col)
    {
        return !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?

1 Answer, 1 is accepted

Sort by
0
Accepted
Angel Petrov
Telerik team
answered on 14 Jan 2014, 12:50 PM
Hi Ashraf,

I want to start with providing more clarity over the ReadOnly property. It determines whether an editor will be rendered once the item enters in edit mode. That said if it is set to true an editor will not be created for the certain column.

Whether the column data is actually editable is determine by the IsEditable property of the column. In case of a template column it will additionally check whether an EditItemTemplate or InsertItemTemplate are declared. In order to check its value on the client you can follow the approach you have illustrated.

Regards,
Angel Petrov
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to the blog feed now.
Tags
Grid
Asked by
أشرف
Top achievements
Rank 1
Answers by
Angel Petrov
Telerik team
Share this question
or