Detecting which transfer button was clicked

4 posts, 1 answers
  1. Dan
    Dan avatar
    17 posts
    Member since:
    Oct 2010

    Posted 12 Oct 2010 Link to this post

    How can I detect (server side) which transfer button was clicked during a RadListBox "Transferring" event?

    I have a RadTreeView in the ItemTemplate of a RadListBox and another RadListBox on the destination side.  I have DragAndDrop and Transfer working both ways except TransferAll from the RadTreeView side does not work.  To Transfer from that side I had to loop through the SelectedNodes from the RadTreeView and I intend to simply set all the Nodes to Selected but how can I detect that the "TransferAll" button was clicked?

    Thanks,
    Dan

  2. Yana
    Admin
    Yana avatar
    4554 posts

    Posted 15 Oct 2010 Link to this post

    Hello Dan,

    I'm not sure I understand your scenario, could you please send us some sample code? Thanks in advance

    Best regards,
    Yana
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Dan
    Dan avatar
    17 posts
    Member since:
    Oct 2010

    Posted 15 Oct 2010 Link to this post

    <asp:Panel runat="server" id="pnlUsers" CssClass="fieldPanelPadBottomClearedLeft" style="margin-bottom: 10px;">
      
        <div style="float: left; width: 325px; vertical-align: middle; margin-left:10px;">
            <asp:Label runat="server" id="Label3"
                        AssociatedControlId="radUserList"
                        Text="Users:" />
      
            <telerik:RadListBox 
                runat="server" ID="radUserList"
                Width="100%" Height="200px"
                SelectionMode="Single"
                AllowTransfer="true"
                TransferToID="radAssignedUserList"
                AutoPostBackOnTransfer="true"
                AllowReorder="false"
                EnableDragAndDrop="true" CssClass="RadListBox1"
                OnTransferring="radUserList_Transferring"
                DataTextField="Name"
                DataValueField="Id">
                <ItemTemplate>
                    <telerik:RadTreeView 
                        ID="UsersTreeView" 
                        Runat="server"
                        EnableViewState="true"
                        EnableDragAndDrop="true"
                        MultipleSelect="true"
                        OnNodeDrop="UsersTreeView_NodeDrop"
                        OnClientNodeDropping="onTreeViewDropping"
                        OnClientMouseOver="onTreeViewMouseOver"
                        OnClientMouseOut="onTreeViewMouseOut" 
                        OnClientNodeDragStart="onTreeViewDragStart"
                        OnClientNodeDragging="onTreeViewDragging"
                        EnableDragAndDropBetweenNodes="false"
                        Width="100%"
                        Height="190px">
                        <DataBindings>
                            <telerik:RadTreeNodeBinding 
                                TextField="Name" 
                                ValueField="Id" 
                                ToolTipField="Name" 
                                HoveredCssClass="TreeViewDraggableNode" />
                        </DataBindings>
                    </telerik:RadTreeView>
                </ItemTemplate>
                <Items>
                    <telerik:RadListBoxItem Value="" Text="" AllowDrag="false" />
                </Items>
            </telerik:RadListBox>
        </div>
      
        <div style="float: left; width: 450px;">
            <asp:Label ID="Label2" runat="server"
                        AssociatedControlId="radAssignedUserList"
                        Text="Users assigned to this Distribution List:" />
      
            <telerik:RadListBox 
                runat="server" ID="radAssignedUserList"
                Width="100%" Height="200px"
                SelectionMode="Multiple"
                AllowReorder="false"
                EnableDragAndDrop="true"
                DataValueField="Id"
                OnClientDropping="onListBoxDropping" 
                OnClientDragStart="onListBoxDragStart" 
                OnClientMouseOver="onListBoxMouseOver"
                OnClientMouseOut="onListBoxMouseOut" 
                OnClientDragging="onListBoxDragging">
                <HeaderTemplate>
                    <asp:Label runat="server" Width="200" Text="Name" />
                    <asp:Label runat="server" Width="125" Text="Group" />
                </HeaderTemplate>
                <ItemTemplate>
                    <asp:Label 
                        runat="server" ID="lblUserName"  
                        Width="200" 
                        Text='<%# DataBinder.Eval(Container.DataItem, "Name")%>' />
                    <asp:Label 
                        runat="server" ID="lblUserGroup" 
                        Width="200" 
                        Text='<%# DataBinder.Eval(Container.DataItem, "GroupName")%>' />
                </ItemTemplate>
            </telerik:RadListBox>
        </div>
      
        <div style="clear: both; padding: 10px; text-align: center;">
            <em>Note:  To move a User or Group, drag to the other window or highlight it and click arrow.<br />(Ctrl + Left-Click to select multiple)</em>
        </div>
      
    </asp:Panel>
    Above is the aspx code for the two ListBoxes and the embedded TreeView.  Below is the Transferring method I am using.
    protected void radUserList_Transferring(object sender, RadListBoxTransferringEventArgs e)
    {
        try
        {
            int distributionListId = 0;
            if (!int.TryParse(txtDistributionListId.Text, out distributionListId))
                return;
            if (distributionListId <= 0)
                return;
            DistributionList selectedDistributionList = new DistributionList(AppSession, distributionListId);
            if (e.SourceListBox == radUserList)
            {
                // If the TransferAll button was clicked, need to set all UserTreeView nodes  
                //   to Selected.  So far we haven't found how to determine which button was 
                //   clicked so am using combination of no selected nodes in UsersTreeView and 
                //   no selected items in radUserList to select all.  ISSUE:  When something   
                //   is selected clicking TransferAll, the TransferAll will act just like the  
                //   Transfer button and only transfer the selected item(s).
                if (UsersTreeView.SelectedNodes.Count.Equals(0) && radUserList.SelectedItems.Count.Equals(0))
                {
                    foreach (RadTreeNode n in UsersTreeView.Nodes)
                    {
                        n.Selected = true;
                    }
                }
                RadTreeView rtv = (RadTreeView)e.Items[0].FindControl("UsersTreeView");
                foreach (RadTreeNode node in rtv.SelectedNodes)
                {
                    if (node.Level != 0)
                    {
                        int userId = int.Parse(node.Value);
                        selectedDistributionList.IncludeUser(userId);
                    }
                    else
                    {
                        foreach (RadTreeNode subNode in node.Nodes)
                        {
                            int userId = int.Parse(subNode.Value);
                            selectedDistributionList.IncludeUser(userId);
                        }
                    }
                }
                radUserList.Items[0].Selected = false;
            }
            else
            {
                foreach (RadListBoxItem item in e.Items)
                {
                    int userId = int.Parse(item.Value);
                    selectedDistributionList.RemoveUser(userId);
                }
            }
            e.Cancel = true;
            // bind the parts section
            BindUsers(selectedDistributionList);
        }
        catch (QueCentreException qex)
        {
            lblDistributionListMessage.Text = "Error: " + qex.Message;
            if (qex.InnerException != null)
            {
                lblDistributionListMessage.Text += "<br />Details: " + qex.InnerException.Message;
            }
            lblDistributionListMessage.Visible = true;
            this.Complete(false);
        }
    }

    Thanks for your help,
    Dan
  5. Answer
    Yana
    Admin
    Yana avatar
    4554 posts

    Posted 21 Oct 2010 Link to this post

    Hello Dan,

    Please subscribe to OnClientTransferring event of the first listbox and add the following javascript handler:

    <script type="text/javascript">
        function clientTransfering(sender, args) {
            var target = args.get_domEvent().target.parentNode;
            while (target.nodeName != "A")
                target = target.parentNode;
            sender.trackChanges();
            if (target.className.indexOf("rlbTransferFrom") > -1)
                sender.get_items().getItem(0).get_attributes().setAttribute("clickedButton", "transferFrom");
            else if (target.className.indexOf("rlbTransferAllFrom") > -1)
                sender.get_items().getItem(0).get_attributes().setAttribute("clickedButton", "transferAllFrom");
            sender.commitChanges();
       }
     </script>

    then you can get the custom attribute in OnTransferring event like this:

    String transferButton = (sender as RadListBox).Items[0].Attributes["clickedButton"].ToString();

    Hope this helps.

    Regards,
    Yana
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Back to Top