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

OnRowCreated not firing until row clicked

0 Answers 89 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Tony
Top achievements
Rank 1
Tony asked on 15 Nov 2017, 12:57 PM

So i am using a RadGrid in a custom control. In the java script i am binding the grids events to events declared in my custom control. The issue is the rowCreated function is not firing until i actually click a row. Since its within a prototype i have to create it as a delegate to ensure i can still access other variables in the same scope.

grid.add_rowCreated(Function.createDelegate(this, this.rowCreated));

 

But this causes the rowCreated event to not fire until i interact with the grid by selecting a row. Could someone give me some guidance on this please, it may be something obvious as i am fairly new to webforms controls. I have added the full code below, but have cut it down to be relevant.

Type.registerNamespace("WebApp.Portal.Controls");
 
// Define the control properties.
WebApp.Portal.Controls.DataViewContainer = function (element) {
    WebApp.Portal.Controls.DataViewContainer.initializeBase(this, [element]);
    this._clientId = null;
    this._radGridId = null;
    this._keyColumnName = null;
    this._idsOfSelectedRows = [];
};
 
// Define the prototype
WebApp.Portal.Controls.DataViewContainer.prototype = {
 
    initialize: function (sender, eventArgs) {
        WebApp.Portal.Controls.DataViewContainer.callBaseMethod(this, 'initialize');
 
        // Will be called on ajax or full postback
        window.Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(Function.createDelegate(this, this.onLoad));
        // If this is being executed by ajax
        if (eventArgs) {
            // And this is only a partial load
            if (eventArgs.get_isPartialLoad()) {
                // Don't perform any further processing
                return;
            }
        }
        // only hit on full postback.
        this.bindEvents();
    },
 
    dispose: function() {
        WebApp.Portal.Controls.DataViewContainer.callBaseMethod(this, 'dispose');
    },
     
    idsOfSelectedRows: [],
 
    //
    // Methods.
    //
    onLoad: function () {
    },
     
    bindEvents: function () {
        var grid = window.$find(this.get_radGridId());
        if (grid != undefined) {
            grid.add_rowSelected(Function.createDelegate(this, this.rowSelected));
            grid.add_rowDeselected(Function.createDelegate(this, this.rowDeselected));
            grid.add_rowCreated(Function.createDelegate(this, this.rowCreated));
            grid.add_gridCreated(Function.createDelegate(this, this.gridCreated));
        }
    },
 
    rowSelected : function(sender, args) {
        var entityId = args.getDataKeyValue(this._keyColumnName);
        this.updateIdsOfSelectedRows(entityId, true);
        console.log(JSON.stringify(this.idsOfSelectedRows));
    },
     
    rowDeselected : function (sender, args) {
        var entityId = args.getDataKeyValue(this._keyColumnName);
        this.updateIdsOfSelectedRows(entityId, false);
        console.log(JSON.stringify(this.idsOfSelectedRows));
    },
     
    rowCreated : function (sender, args) {
        var entityId = args.getDataKeyValue(this._keyColumnName);
        console.log("Row Created: " + entityId);
        if ($.inArray(entityId, this.idsOfSelectedRows) >= 0) {
            args.get_gridDataItem().set_selected(true);
        }
    },
     
    gridCreated : function (sender, eventArgs) {
        var masterTable = sender.get_masterTableView();
        var selectColumn = masterTable.getColumnByUniqueName("clmSelect");
        var headerCheckBox = $(selectColumn.get_element()).find("[type=checkbox]")[0];
        if (headerCheckBox) {
            headerCheckBox.checked = masterTable.get_selectedItems().length == masterTable.get_dataItems().length;
        }
    },
     
    updateIdsOfSelectedRows : function(id, isSelected) {
        var index = $.inArray(id, this.idsOfSelectedRows);
        if (!isSelected && index >= 0) {
            this.idsOfSelectedRows.splice(index, 1); // remove id from the list
        } else if (index < 0) {
            this.idsOfSelectedRows.push(id);
        }
    },
 
    //
    // Properties.
    //
    get_radGridId: function() {
        return this._radGridId;
    },
     
    set_radGridId: function(value) {
        if (this._radGridId !== value) {
            this._radGridId = value;
            this.raisePropertyChanged('_radGridId');
        }
    },
 
    get_clientId: function () {
        return this._clientId;
    },
 
    set_clientId: function (value) {
        if (this._clientId !== value) {
            this._clientId = value;
            this.raisePropertyChanged('clientId');
        }
    },
     
    get_keyColumnName: function () {
        return this._keyColumnName;
    },
 
    set_keyColumnName: function (value) {
        if (this._keyColumnName !== value) {
            this._keyColumnName = value;
            this.raisePropertyChanged('keyColumnName');
        }
    },
};
 
WebApp.Portal.Controls.DataViewContainer.registerClass('WebApp.Portal.Controls.DataViewContainer', Sys.UI.Control);

 

 

No answers yet. Maybe you can help?

Tags
Grid
Asked by
Tony
Top achievements
Rank 1
Share this question
or