I have a grid with canRemoveRecords:true. The little orange X works just fine. I have an OPEN button that should be disabled if there is no selected record. The grid had the following code invoked on selectionChanged.
	This worked fairly well, except when a record is removed using the X. Clicking the X selects the record briefly and then a few moments later, the record is gone. The OPEN button is not disabled.
In my research, I understood that only user actions can trigger selectionChanged.
	
		
So, I kept looking to understand my disconnect. I finally figured to override the dataChanged event on the grids 'data'.
	This parses correctly, and the function is invoked when I create a new subscriber. Then remove it on the next click.
	
		
I finally got the button disabled. Thinking it was a timing issue, I added a delay.
	This works. But, I am wondering if there is a better way. This seems like a kluge.
Also, after last minute testing I find that this technique fails with warnOnRemoval:true on the grid. Obviously, while the confirmation dialog is showing, the record is still selected.
Thanks,
Rick
P.S. I am running SmartClient Version: v8.3p_2014-06-27/EVAL on Mozilla Firefox 20.0 with Firebug using Windows 7 Premium 64 bit.
					Code:
	
	    if ( grid.anySelected() ) {
        IssueSubscriberOpenButton.setDisabled(false);
        var rec = grid.getSelectedRecord();
        Application.currentIssueID = rec.IssueID;
        Application.currentSubscriberTeamMemberID = rec.TeamMemberID;
    }
    else {
        IssueSubscriberOpenButton.setDisabled(true);
    }
In my research, I understood that only user actions can trigger selectionChanged.
			
			
				By design, selectionChanged fires only do to user events, not programmatic calls (otherwise it's very easy to get into infinite loops).
			
		
	Code:
	
	isc.ListGrid.create({ ID:"IssueSubscriberGrid",
    autoDraw:false,
    dataSource:"IssueSubscriber",
    fields:[
        {
            name:"TeamMemberName",
            title:"Subscriber",
            width:"*",
            canEdit:false
        },
        {
            name:"Internal",
            title:"Internal",
            valueField:"OrganizationID",
            displayField:"Internal",
            canEdit:false,
            type:"boolean"
        },
        {
            name:"OrganizationName",
            title:"Organization",
            width:"*",
            valueField:"OrganizationID",
            displayField:"OrganizationName",
            canEdit:false
        },
        {
            name:"Enabled",
            title:"Enabled",
            canEdit:false,
            type:"boolean"
        },
        {
            name:"TeamMemberEmail",
            title:"Email",
            width:"*",
            canEdit:false
        },
        {
            name:"TeamMemberSMS",
            title:"SMS",
            width:70,
            canEdit:false
        },
        {
            name:"AnyChangeOption",
            title:"Any Change",
            type:"boolean"
        },
        {
            name:"StatusChangeOption",
            title:"Status Change",
            type:"boolean"
        },
        {
            name:"DueReminderOption",
            title:"Due Reminder",
            type:"boolean"
        },
        {
            name:"DueReminderDate",
            title:"Date",
            width:"10%",
            type:"date"
        },
        {
            name:"DueReminderTime",
            title:"Time",
            width:"10%",
            type:"time"
        }
    ],
    showDetailFields:false,
    listEndEditAction:"next",
    showFilterEditor:false,
    canEdit:true,
    canSort:false,
    sortDirection:false,
    canReorderFields:false,
    dragDataAction:"none",
    autoFetchData:true,
    canRemoveRecords:true,
    selectionType:"single",
    "xsi:type":"ListGrid",
    selectionChanged:"IssueSubscriberGrid_selectionChanged(this);",
    recordDoubleClick:"OpenIssueSubscriber(record, IssueSubscriberForm);"
})
IssueSubscriberGrid.data.setProperty( "dataChanged", function () { IssueSubscriberGrid_selectionChanged(IssueSubscriberGrid); } );
//IssueSubscriberGrid.data.dataChanged = function () { IssueSubscriberGrid_selectionChanged(IssueSubscriberGrid) }
			
			
				15:28:28.052:MUP0:INFO:Log:********************* IssueSubscriber_NewButton_click
15:28:28.230:MUP0:INFO:Log:***END***END***END*** IssueSubscriber_NewButton_click
15:28:34.083:IFCS8:DEBUG:Log:********************** IssueSubscribersForm.itemChanged
15:28:34.100:IFCS8:DEBUG:Log:***END***END***END*** IssueSubscribersForm.itemChanged
15:28:41.128:IBLR8:DEBUG:Log:********************** IssueSubscribersForm.itemChanged
15:28:41.129:IBLR8:DEBUG:Log:***END***END***END*** IssueSubscribersForm.itemChanged
15:28:41.228:MUP3:INFO:Log:********************* IssueSubscriberForm_SaveButton_click
15:28:41.374:MUP3:INFO:Log:***END***END***END*** IssueSubscriberForm_SaveButton_click
15:28:51.775:MDN5:INFO:Log:********************* IssueSubscriberGrid_selectionChanged
15:28:51.780:MDN5:INFO:Log:***END***END***END*** IssueSubscriberGrid_selectionChanged
	15:28:28.230:MUP0:INFO:Log:***END***END***END*** IssueSubscriber_NewButton_click
15:28:34.083:IFCS8:DEBUG:Log:********************** IssueSubscribersForm.itemChanged
15:28:34.100:IFCS8:DEBUG:Log:***END***END***END*** IssueSubscribersForm.itemChanged
15:28:41.128:IBLR8:DEBUG:Log:********************** IssueSubscribersForm.itemChanged
15:28:41.129:IBLR8:DEBUG:Log:***END***END***END*** IssueSubscribersForm.itemChanged
15:28:41.228:MUP3:INFO:Log:********************* IssueSubscriberForm_SaveButton_click
15:28:41.374:MUP3:INFO:Log:***END***END***END*** IssueSubscriberForm_SaveButton_click
15:28:51.775:MDN5:INFO:Log:********************* IssueSubscriberGrid_selectionChanged
15:28:51.780:MDN5:INFO:Log:***END***END***END*** IssueSubscriberGrid_selectionChanged
Code:
	
	function testIssueSubscriberGrid_selection() {
    if ( grid.anySelected() ) {
        IssueSubscriberOpenButton.setDisabled(false);
        var rec = grid.getSelectedRecord();
        Application.currentIssueID = rec.IssueID;
        Application.currentSubscriberTeamMemberID = rec.TeamMemberID;
    }
    else {
        IssueSubscriberOpenButton.setDisabled(true);
    }
}
setTimeout(testIssueSubscriberGrid_selection, 500);
Also, after last minute testing I find that this technique fails with warnOnRemoval:true on the grid. Obviously, while the confirmation dialog is showing, the record is still selected.
Thanks,
Rick
P.S. I am running SmartClient Version: v8.3p_2014-06-27/EVAL on Mozilla Firefox 20.0 with Firebug using Windows 7 Premium 64 bit.

Comment