Drop Indicator on Self-Referencing Heirarchical Tree List View not being displayed

3 posts, 1 answers
  1. Kevin
    Kevin avatar
    28 posts
    Member since:
    Dec 2008

    Posted 17 Oct 2012 Link to this post

    I have a problem with the tree list view.  I understand that out of the box the ASP.NET Ajax version of the TreeListView is supposed to support the Drop Line Indicator but on my implementation of the control I don't have that.  Is there something that I am doing or something that I should turn on?  I have looked through the documentation and I have looked through the forums and I keep getting references to wpf and silverlight and nothing on the asp.net AJAX control.  So a little help would be great.  Also attached is a screen shot of the site where I have this to show that I am not getting any indicator.  Here's my code:

    <telerik:RadTreeList ID="MenuManager" runat="server">
        <Columns>
            <telerik:TreeListBoundColumn DataField="MenuText" HeaderText="Menu Name" UniqueName="Name" />
            <telerik:TreeListHyperLinkColumn DataNavigateUrlFields="SitePageID" DataNavigateUrlFormatString="/admin/pageManager/?CID={0}" DataTextField="PageTitle" HeaderText="Url Title" UniqueName="PageTitle"  />
            <telerik:TreeListBoundColumn DataField="MenuUrl" HeaderText="Url" UniqueName="MenuUrl" />
            <telerik:TreeListBoundColumn DataField="MenuTarget" HeaderText="Target" UniqueName="MenuTarget" HeaderStyle-Width="60px" />
            <telerik:TreeListBoundColumn DataField="IsEnabled" HeaderText="Status" UniqueName="MenuItemEnabled" HeaderStyle-Width="60px" />
            <telerik:TreeListEditCommandColumn ButtonType="ImageButton" HeaderStyle-Width="60px" />
            <telerik:TreeListButtonColumn ButtonType="ImageButton" ButtonCssClass="deleteConfirm" CommandName="Delete" HeaderStyle-Width="30px" />
        </Columns>
        <EditFormSettings UserControlPath="~/includes/userControls/MenuForm.ascx" EditFormType="WebUserControl">
        </EditFormSettings>
        <ClientSettings AllowItemsDragDrop="true">
            <Selecting AllowItemSelection="True" />
        </ClientSettings>
    </telerik:RadTreeList>

    Here is my code:
    private string[] DataKey = { "MenuID" };
    private string[] ParentKey = { "ParentID" };
    private List<SiteMenu> MenuList = new List<SiteMenu>();
     
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        MenuManager.Skin = "Default";
        MenuManager.AllowPaging = false;
        MenuManager.AutoGenerateColumns = false;
        MenuManager.GridLines = TreeListGridLines.Both;
        MenuManager.ShowTreeLines = false;
        MenuManager.NeedDataSource += MenuManager_NeedDataSource;
        MenuManager.ItemCommand += MenuManager_ItemCommand;
        MenuManager.InsertCommand += MenuManager_InsertCommand;
        MenuManager.UpdateCommand += MenuManager_UpdateCommand;
        MenuManager.DeleteCommand += MenuManager_DeleteCommand;
        MenuManager.ItemDataBound += MenuManager_ItemDataBound;
        MenuManager.ClientSettings.AllowItemsDragDrop = true;
        MenuManager.ClientSettings.Selecting.AllowItemSelection = true;
        MenuManager.AllowMultiItemSelection = true;
        MenuManager.DataKeyNames = DataKey;
        MenuManager.ParentDataKeyNames = ParentKey;
        MenuManager.ItemDrop += MenuManager_RowDrop;
        MenuManager.GridLines = TreeListGridLines.Both;
     
        MenuList = new SiteMenu().SelectAllPublicMenuItemsBySiteIDNotDeleted(ThisSiteID);
    }
     
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        if (!IsPostBack)
        {
            MenuManager.ExpandToLevel(1);
        }
    }
     
    protected void MenuManager_NeedDataSource(object sender, TreeListNeedDataSourceEventArgs e)
    {
        MenuManager.DataSource = MenuList;
    }
     
    protected void MenuManager_ItemCommand(object sender, TreeListCommandEventArgs e)
    {
        if (e.CommandName == RadTreeList.InitInsertCommandName)
        {
            MenuManager.ClientSettings.Reordering.AllowColumnsReorder = false;
        }
        if (e.CommandName == RadTreeList.CancelCommandName)
        {
            MenuManager.ClientSettings.Reordering.AllowColumnsReorder = true;
        }
    }
     
    protected void MenuManager_ItemDataBound(object sender, TreeListItemDataBoundEventArgs e)
    {
        if (e.Item is TreeListDataItem)
        {
            TreeListDataItem item = (TreeListDataItem)e.Item;
            if (item["MenuItemEnabled"].Text == "True")
            {
                item["MenuItemEnabled"].Text = "Enabled";
            }
            else
            {
                item["MenuItemEnabled"].Text = "Disabled";
            }
            if (item["MenuUrl"].Text.Contains("?CID="))
            {
                item["MenuUrl"].Attributes.Add("style", "color:#AAA");
            }
        }
    }
     
    protected void MenuManager_InsertCommand(object sender, TreeListCommandEventArgs e)
    {
        TreeListEditFormItem item = e.Item as TreeListEditFormItem;
        UserControl MenuForm = (UserControl)e.Item.FindControl(TreeListEditFormItem.EditFormUserControlID);
     
        int parentID = 0;
     
        if (item.ParentItem != null)
        {
            parentID = (int)item.ParentItem.GetDataKeyValue("MenuID");
        }
     
        RadComboBox menuType = (RadComboBox)MenuForm.FindControl("MenuSelectList");
        RadTextBox menuText = (RadTextBox)MenuForm.FindControl("MenuText");
        switch (menuType.SelectedItem.Text)
        {
            case "Editable Content":
                RadTextBox pageTitle = (RadTextBox)MenuForm.FindControl("PageTitle");
                CheckBox defaultHomepage = (CheckBox)MenuForm.FindControl("DefaultHomepage");
                if (new SiteMenu().InsertNewMenuItem(parentID, menuText.Text, pageTitle.Text, defaultHomepage.Checked))
                {
                    Response.Redirect("/admin/menuManager/");
                }
                break;
            case "Document Link":
                UploadedFile uploadedFile = null;
                RadUpload docUpload = (RadUpload)MenuForm.FindControl("DocumentLink");
                docUpload.MaxFileSize = 10000000;
                if (docUpload.UploadedFiles.Count > 0)
                {
                    uploadedFile = docUpload.UploadedFiles[0];
                }
                if (new SiteMenu().InsertNewDocumentLink(parentID, menuText.Text, uploadedFile.GetName()))
                {
                    Response.Redirect("/admin/menuManager/");
                }
                break;
            case "External / Custom Link":
                RadTextBox linkUrl = (RadTextBox)MenuForm.FindControl("LinkUrl");
                RadComboBox target = (RadComboBox)MenuForm.FindControl("LinkTarget");
                if (new SiteMenu().InsertExternalLink(parentID, menuText.Text, linkUrl.Text, target.Text))
                {
                    Response.Redirect("/admin/menuManager/");
                }
                break;
            case "Chamber Modules":
                RadComboBox moduleType = (RadComboBox)MenuForm.FindControl("ModulePageType");
                if (new SiteMenu().InsertNewModuleMenuItem(parentID, menuText.Text, moduleType.SelectedValue))
                {
                    Response.Redirect("/admin/menuManager/");
                }
                break;
        }
    }
     
    protected void MenuManager_UpdateCommand(object sender, TreeListCommandEventArgs e)
    {
        TreeListEditFormItem item = e.Item as TreeListEditFormItem;
        UserControl MenuForm = (UserControl)e.Item.FindControl(TreeListEditFormItem.EditFormUserControlID);
     
        int thisMenu = (int)item.ParentItem.GetDataKeyValue("MenuID");
     
        RadComboBox menuType = (RadComboBox)MenuForm.FindControl("MenuSelectList");
        RadTextBox menuText = (RadTextBox)MenuForm.FindControl("MenuText");
        CheckBox enabled = (CheckBox)MenuForm.FindControl("MenuItemEnabled");
     
        switch (new SubCategory().SelectThisSubCategory(Convert.ToInt32(menuType.SelectedValue), PCSSession.Current.SiteID).TypeDescription.ToLower())
        {
            case "editable content":
                RadTextBox pageTitle = (RadTextBox)MenuForm.FindControl("PageTitle");
                CheckBox defaultHomepage = (CheckBox)MenuForm.FindControl("DefaultHomepage");
                if (new SiteMenu().UpdateThisMenuItem(ThisSiteID, thisMenu, menuType.SelectedValue, menuText.Text, pageTitle.Text, enabled.Checked, defaultHomepage.Checked))
                {
                    Response.Redirect("/admin/menuManager/");
                }
                break;
            case "document link":
                UploadedFile uploadedFile = null;
                RadUpload docUpload = (RadUpload)MenuForm.FindControl("DocumentLink");
                docUpload.MaxFileSize = 10000000;
                if (docUpload.UploadedFiles.Count > 0)
                {
                    uploadedFile = docUpload.UploadedFiles[0];
     
                    if (new SiteMenu().UpdateThisDocumentLink(thisMenu, menuType.SelectedValue, menuText.Text, uploadedFile.GetName(), enabled.Checked))
                    {
                        Response.Redirect("/admin/menuManager/");
                    }
                }
                else
                {
                    if (new SiteMenu().UpdateThisMenuText(thisMenu, menuType.SelectedValue, menuText.Text, enabled.Checked))
                    {
                        Response.Redirect("/admin/menuManager/");
                    }
                }
                break;
            case "external / custom link":
                RadTextBox linkUrl = (RadTextBox)MenuForm.FindControl("LinkUrl");
                RadComboBox target = (RadComboBox)MenuForm.FindControl("LinkTarget");
                if (new SiteMenu().UpdateThisExternalLink(thisMenu, menuType.SelectedValue, menuText.Text, linkUrl.Text, target.SelectedItem.Text, enabled.Checked))
                {
                    Response.Redirect("/admin/menuManager/");
                }
                break;
            case "chamber modules":
                RadComboBox moduleType = (RadComboBox)MenuForm.FindControl("ModulePageType");
                if (new SiteMenu().UpdateThisModuleMenuItem(thisMenu, menuType.SelectedValue, menuText.Text, moduleType.SelectedValue, enabled.Checked))
                {
                    Response.Redirect("/admin/menuManager/");
                }
                break;
        }
    }
     
    protected void MenuManager_DeleteCommand(object sender, TreeListCommandEventArgs e)
    {
        TreeListDataItem item = e.Item as TreeListDataItem;
     
        int thisMenuItem = (int)item.GetDataKeyValue("MenuID");
     
        int menuType = new SiteMenu().SelectThisMenuItem(thisMenuItem, ThisSiteID).MenuTypeID;
        switch (new SubCategory().SelectThisSubCategory(menuType, ThisSiteID).TypeDescription.ToLower())
        {
            case "document link":
                if (new SiteMenu().DeleteThisDocumentLink(thisMenuItem))
                {
                    Response.Redirect("/admin/menuManager/");
                }
                break;
            case "editable content":
                if (new SiteMenu().DeleteTheEditableContentPage(thisMenuItem))
                {
                    Response.Redirect("/admin/menuManager/");
                }
                break;
            default:
                if (new SiteMenu().DeleteThisMenuItem(thisMenuItem))
                {
                    Response.Redirect("/admin/menuManager/");
                }
                break;
        }
    }
     
    protected void MenuManager_RowDrop(object sender, TreeListItemDragDropEventArgs e)
    {
        int key = (int)e.DraggedItems[0].GetDataKeyValue("MenuID");
     
        int destinationId = 0;
        int sortOrder = 0;
     
        if (IsUnder.Checked)
        {
            destinationId = (int)e.DestinationDataItem.GetDataKeyValue("MenuID");
            sortOrder = 1;
        }
        else
        {
            destinationId = (int)e.DestinationDataItem.GetParentDataKeyValue("ParentID");
            sortOrder = new SiteMenu().SelectThisMenuItem((int)e.DestinationDataItem.GetDataKeyValue("MenuID"), ThisSiteID).SortOrder + 1;
        }
     
        if (destinationId == 0)
        {
            if (key != destinationId)
            {
                MenuList.FirstOrDefault(i => i.MenuID == key).ParentID = destinationId;
                MenuList.FirstOrDefault(i => i.MenuID == key).SortOrder = sortOrder;
     
                foreach (SiteMenu menuItem in MenuList.Where(i => i.ParentID == destinationId))
                {
                    if (menuItem.SortOrder >= sortOrder && menuItem.MenuID != key)
                    {
                        menuItem.SortOrder += 1;
                    }
                }
     
                if (new SiteMenu().UpdateMenuListByParentID(destinationId, MenuList.Where(i => i.ParentID == destinationId).ToList()))
                {
                    Response.Redirect("/admin/menuManager/");
                }
            }
        }
        else
        {
            if (key != destinationId && key != MenuList.FirstOrDefault(i => i.MenuID == destinationId).ParentID)
            {
                MenuList.FirstOrDefault(i => i.MenuID == key).ParentID = destinationId;
                MenuList.FirstOrDefault(i => i.MenuID == key).SortOrder = sortOrder;
     
                foreach (SiteMenu menuItem in MenuList.Where(i => i.ParentID == destinationId))
                {
                    if (menuItem.SortOrder >= sortOrder && menuItem.MenuID != key)
                    {
                        menuItem.SortOrder += 1;
                    }
                }
     
                if (new SiteMenu().UpdateMenuListByParentID(destinationId, MenuList.Where(i => i.ParentID == destinationId).ToList()))
                {
                    Response.Redirect("/admin/menuManager/");
                }
            }
        }
    }

  2. Answer
    Galin
    Admin
    Galin avatar
    526 posts

    Posted 22 Oct 2012 Link to this post

    Hello Kevin,

    The RadTreeList does not have a drop line indicator like the RadGrid, because this is a hierarchy structure and usually you cannot drop the item between two others.

    The arrow indicates you when you can drop the item.

    I hope this helps.

    Greetings,
    Galin
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Kevin
    Kevin avatar
    28 posts
    Member since:
    Dec 2008

    Posted 28 Oct 2012 Link to this post

    No this doesn't help but it does answer the question.  I have created some custom handling so that each drop moves the item as a sibling instead of a child.  For the most part this works great but it doesn't show the end user where the drop will occur.  Adding this functionality would be very helpful if this is possible.
Back to Top