Goal: Allow the user to delete a record by dragging a row from an
AdvancedDataGrid, dropping it onto a trash-can icon and verify the
user meant to do that via a popup alert with "OK" and "Cancel" buttons.
What is working:
* Dragging/Dropping a row onto the trash icon.
* If the user clicks the "OK" button, the record is deleted.
* If the user clicks the "Cancel" button, the operation is canceled.
Problem: After the user clicks the "Cancel" button and the popup alert
closes, no rows in the ADG can be dragged. I've discovered that after
sorting the ADG, by clicking on a column header, the user can begin
dragging rows again.
Code Flow:
1. Drag/drop ADG row onto trash icon.
2. Display confirmation Alert box.
3. If user clicked "Cancel" button, redisplay the ADG.
Code:
<mx:Image source="{trashImage}" buttonMode="true"
toolTip="drag a participant here to delete them from the project"
dragDrop="deleteParticipantDrop(event)"
dragEnter="deleteParticipantEnter(event)"
dragExit="deleteParticipantDragExit(event)" top="4" right="122"
id="image2" />
// trashImage Event Handlers:
private function deleteParticipantEnter(event:DragEvent):void
{
var component:IUIComponent = IUIComponent(event.currentTarget);
dragComponent = component;
DragManager.acceptDragDrop(component);
DragManager.showFeedback(DragManager.MOVE);
deleteParticipantDragEvent = event;
}
private function deleteParticipantDrop(event:DragEvent):void
{
var selectedKitNum:String = memberRpt.selectedItem.KitNum;
var selectedName:String = memberRpt.selectedItem.ParticipantName;
var component:IUIComponent = IUIComponent(event.currentTarget);
dragComponent = component;
DragManager.acceptDragDrop(component);
isEditingParticipantInfo = false;
isDeletingParticipant = true;
deleteParticipantDropEvent = event;
event.stopImmediatePropagation(); // Added as per mrm
alert.confirm("Are you sure you want to delete this
participant, Kit #" + memberRpt.selectedItem.KitNum + " (" +
memberRpt.selectedItem.ParticipantName + ") from the
project? This cannot be reversed!! An email will be " +
"sent to notify this participant and you will receive
a copy of it for your records.", confirmRemoveParticipant);
}
private function deleteParticipantDragExit(event:DragEvent):void
{
var component:IUIComponent = IUIComponent(event.currentTarget);
dragComponent = component;
DragManager.acceptDragDrop(component);
DragManager.showFeedback(DragManager.NONE);
}
private function confirmRemoveParticipant(event:CloseEvent):void
{
if (event.detail == Alert.YES)
{
deleteReason =
DeleteParticipantTitleWindow(PopUpManager.createPopUp( this,
DeleteParticipantTitleWindow , true));
dispatchEvent(deleteParticipantDropEvent); // Added as
per mrm
PopUpManager.centerPopUp(deleteReason);
deleteReason.showCloseButton = true;
deleteReason.title = "Reason for removal from project";
deleteReason.addEventListener("close",
cleanupRemoveParticipant);
deleteReason["cancelButton"].addEventListener("click",
cleanupRemoveParticipant);
deleteReason["okButton"].addEventListener("click",
finalizeDeleteParticipant);
isDeletingParticipant = false;
}
else
{
cleanupRemoveParticipant();
}
}
private function cleanupRemoveParticipant(event:Event = null):void
{
memberRpt.invalidateDisplayList();
memberRpt.executeBindings();
if (deleteReason != null)
{
PopUpManager.removePopUp(deleteReason);
deleteReason = null;
}
}
public function finalizeDeleteParticipant(event:Event):void
{
if (deleteReason.reason.text != null)
{
selectedReportItem = memberRpt.selectedItem;
selectedReportItemIndex = memberRpt.selectedIndex;
memberReportData.removeItemAt(selectedReportItemIndex);
}
else
{
alert.info("You must provide a reason for removing a
participant from your project!!");
}
cleanupRemoveParticipant();
}