This is a migrated thread and some comments may be shown as answers.

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

2 Answers 68 Views
TreeList
This is a migrated thread and some comments may be shown as answers.
Kevin
Top achievements
Rank 1
Kevin asked on 17 Oct 2012, 04:40 PM
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 Answers, 1 is accepted

Sort by
0
Accepted
Galin
Telerik team
answered on 22 Oct 2012, 04:02 PM
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.
0
Kevin
Top achievements
Rank 1
answered on 28 Oct 2012, 04:31 PM
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.
Tags
TreeList
Asked by
Kevin
Top achievements
Rank 1
Answers by
Galin
Telerik team
Kevin
Top achievements
Rank 1
Share this question
or