telerikradlistbox

Telerik RadListBox, transfer item through code


Ok I just want to know if what I am thinking of is even possible. I have tried researching but was not able to find anything. I have two RadLsitBox that I can transfer data between. I want to know if I could add an Undo button that could undo the last transfer I make.

FYI Client wants an undo button. I do not think this is possible to pass items only through code without pressing the buttons but if someone has a way I would like to hear.

 <telerik:RadListBox ID="rlbStations" runat="server" AllowTransfer="True" TransferToID="rlbAllowedStations"
                            Height="200px" Skin="Web20" SelectionMode="Multiple" Sort="Ascending" DataKeyField="station_id"
                            AutoPostBackOnTransfer="true" Width="250px" OnTransferred="rlbStations_Transferred">
                            <ButtonSettings ShowDelete="False" ShowReorder="False" />
                        </telerik:RadListBox>

                        <telerik:RadListBox ID="rlbAllowedStations" runat="server" Height="200px" Width="250px"
                            Skin="Web20">
                        </telerik:RadListBox>

EDIT: Add javascript

 var UndoList = new Array();
    function onClientTransferring(sender, e) {
        var items = e.get_items();
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            if (item.get_text() != "Select" || item.get_value() != "") {
                UndoList.push(item);
                UndoList.push(e.get_sourceListBox());
                UndoList.push(e.get_destinationListBox());
                sender.transferItem(item, e.get_sourceListBox(),e.get_destinationListBox());
            }
        }

    }

    function undoChanges() {
        if (UndoList[UndoList.length - 1]._clientStateFieldID == "rlbStations_ClientState") {
        var listbox = $find('rlbStations');
        }
    else if (UndoList[UndoList.length - 1]._clientStateFieldID == "rlbAllowedStations_ClientState") {
        var listbox = $find('rlbAllowedStations');
        }
        listbox.transferItem(UndoList[UndoList.length - 3], UndoList[UndoList.length - 2], UndoList[UndoList.length - 1]);
    }

Solution

  • The answer is: yes! You can transfer items without using the built-in transfer buttons. Here is a code sample using JavaScript as an example:

    function onClientTransferring(sender, e) {debugger
       //cancel the event
       e.set_cancel(true);
       //manually transfer the appropriate items
       var items = e.get_items();
       for (var i = 0; i < items.length; i++) {
           var item = items[i];
           if (item.get_text() != "Select" || item.get_value() != "") {
               sender.transferItem(item, e.get_sourceListBox(), e.get_destinationListBox());
           }
       }
    }
    

    And the RadListBox:

    <telerik:RadListBox ID="RadListBox1"
       runat="server"
       Skin="Vista"
       AllowTransfer="true"   
       TransferToID="RadListBox2"
       DataKeyField="ID"  
       OnClientTransferring="onClientTransferring"
       DataTextField="Name"
       DataValueField="ID"       
       DataSourceID="SqlDataSource1" >    
    </telerik:RadListBox>
    <telerik:RadListBox ID="RadListBox2" runat="server"
       Skin="Vista"
       AllowTransfer="true">
    

    http://www.telerik.com/help/aspnet-ajax/listbox-how-to-transfer-specific-items-with-transferall-button.html