FileExplorer- Tree control

7 posts, 0 answers
  1. srikanth
    srikanth avatar
    12 posts
    Member since:
    Aug 2010

    Posted 25 Aug 2010 Link to this post

    Hi Telerik,

    I am using custom fileexplorer in my application. In this, i am adding some custom columns to the grid some of which are hidden and i could use them as attribute. I could get the attribute for an item in a grid how ever the same is not available for a tree node. This custom attribute are added for both files and directories in respective ResolveDirectory() and ResolveRootDirectoryAsTree() methods.
    1. Is it possible to get the custom attribute of a  tree node?
    2. Is there any event available for treebind at client or server? What i have to do is, on binding, i have to check the custom attribute value and set a different image for the node. This is available with the grid :OnGridRowDataBound(). Do we have similar one for tree?
    3. How could i disbale the custom menu item in a Tree? s explained in above case, i check the attribute and disable the menu item
     I used the following code but no success in disabling context menu item
     function OnClientContextMenuShowing
    {      var contextMenu = radExplorer.get_tree().get_contextMenus();var menuItemImport = contextMenu[0]._findItemByValue("Import");
    menuItemImport.disable();//None of this is making the custom menu item "Import" disabled
    //menuItemImport..set_enabled(false);//
    }
    Regards,
    Srikanth
  2. Dobromir
    Admin
    Dobromir avatar
    1633 posts

    Posted 27 Aug 2010 Link to this post

    Hi Srikanth,

    Straight to your questions:
    1. RadTreeView does not offer the same functionality as RadGrid to add attributes but you can achieve this by adding them to the nodes manually using the following code:
      protected override void OnInit(EventArgs e)
      {
          base.OnInit(e);
          RadFileExplorer1.TreeView.Load += new EventHandler(TreeView_Load);
          RadFileExplorer1.TreeView.NodeExpand += new RadTreeViewEventHandler(TreeView_NodeExpand);
      }
       
      private void TreeView_Load(object sender, EventArgs e)
      {
          RadTreeView tree = sender as RadTreeView;
          AddFileExplorerItemAttributes(tree.Nodes[0], "10");
      }
       
      private void AddFileExplorerItemAttributes(RadTreeNode node, String value)
      {
          node.Attributes.Add("customAttribute", value);
          if (node.Nodes.Count > 0)
          {
              for (int i = 0; i < node.Nodes.Count; i++)
              {
                  AddFileExplorerItemAttributes(node.Nodes[i], i.ToString());
              }
          }
      }
       
      void TreeView_NodeExpand(object sender, RadTreeNodeEventArgs e)
      {
          for (int i = 0; i < e.Node.Nodes.Count; i++)
          {
              RadTreeNode node = e.Node.Nodes[i];
       
              AddFileExplorerItemAttributes(node, (i * 10).ToString());
          }
      }
      Then you can access this custom attribute on the client using the following approach:
      var fileExplorer = $find("<% = RadFileExplorer1.ClientID %>");
      var treeView = fileExplorer.get_tree();
      var customAttributeValue = treeView.get_selectedNode().get_attributes().getAttribute("customAttribute");
      alert(customAttributeValue);
    2. RadFileExplorer uses RadTreeView to provide the treeview functionality. RadTreeView offers both server-side and client-side events for nodeDataBound. You can find more information regarding these two methods in the following help articles:
      NodeDataBound Server-side Event
      OnClientNodeDataBound
    3. I am not quite sure why the provided sample code is not working on your side. In order to disable a context menu item you can use the following approach:
      function OnClientFileExplorerLoad(fileExplorer, args)
      {
          var tree = fileExplorer.get_tree();//get reference to the treeView object
          function contextMenuShownHandler(treeView, args)
          {
              treeView.get_contextMenus()[0].findItemByText("CustomContextMenuItem").disable();//disable the context menu item with text CustomContextMenuItem
          }
          tree.add_contextMenuShown(contextMenuShownHandler);//add OnClientContextMenuShown handler
      }

    I hope this helps.

    All the best,
    Dobromir
    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. srikanth
    srikanth avatar
    12 posts
    Member since:
    Aug 2010

    Posted 02 Sep 2010 Link to this post

    Hi Telerik,

    Let me frame my question like this.

    1. In file explorer tree context menu i have a custom menu added. I have to enable it or disable it based on a value. This value is added during to DirectoryItem object when ResolveRootDirectoryAsTree() is called. I am adding this value as explained in the below code
    public override DirectoryItem ResolveRootDirectoryAsTree(string path)
            {
                DirectoryItem returnValue = new DirectoryItem(GetName(path),
                                                                GetDirectoryPath(path),
                                                                path,
                                                                string.Empty,
                                                                GetPermissions(path),
                                                                null, // The files  are added in ResolveDirectory()
                                                                GetChildDirectories(path));
                return returnValue;
            }
    private DirectoryItem[] GetChildDirectories(string path)
            {
                List<DirectoryItem> directories = new List<DirectoryItem>();
                try
                {
                    DataRow[] childRows = DataServer.GetChildDirectoryRows(path);
                    int i = 0;
                    while (i < childRows.Length)
                    {
                        DataRow childRow = childRows[i];
                        string name = childRow["Name"].ToString();
                        string itemFullPath = VirtualPathUtility.AppendTrailingSlash(CombinePath(path, name));

                        DirectoryItem newDirItem = new DirectoryItem(name,
                                                                     string.Empty,
                                                                     itemFullPath,
                                                                     string.Empty,
                                                                     GetPermissions(itemFullPath),
                                                                     null, // The files are added in ResolveDirectory()
                                                                     null // Directories are added in ResolveRootDirectoryAsTree()
                                                                     );
                       
                        newDirItem.Attributes.Add("ItemState", childRow["ItemState"].ToString());
                        directories.Add(newDirItem);
                        i = i + 1;
                    }
                    return directories.ToArray();
                }
                catch (Exception)
                {
                  
                }
            }

    childRow["ItemState"] would give my ItemState value which is added as a property for that particular node item.

    So now in client side, i need to get this property when i right click context menu i.e when OnClientContextMenuShown(sender, args) function is called i need to get the attribute "ItemState" of that particular node and based on the value i will enable or diable the context menu item.

    The same property for an intem in file explorer grid could be fetched at present how ever i could not fetch the same for tree node item.

    2. The Rename context menu on tree node is clicked, file explorer control is getting refreshed but the new name does not get bounded to node immediately. Only after page load, this newly entered name is appreaing. However, renaming an item on grid is immediately reflecting.
    3. As explained in #1, i have to disable context menu based on the value. I followed one of your forum which has suggested to use a hidden span and append it to item name property and onclient side get this value using javascript substring operation. This is working fine where i could get the value and disable the context menu based on the value. But now the problem is rename. When i try to rename such nodes, it shows the folder name along with that hidden span string. How do i reset the node name to its older value by strippping its hidden text? I have got the the original text of the node and now i need to set this to the node which is in rename(edit) state???
    My node name with hidden string is : Images2 <span class='hiddenSpan'>Importing</span>
    Original string is : Images2

    4. What does this api do ?
    radExplorer.get_tree().get_selectedNode()._getControl()._editNodeText(f,h,e)
    What is f and h and e stand for?
    As explained in #3, can i use this API to set the node name?

    5. Last time i spoke about non-alignment of page slider wehn splitter is dragged in file explorer in IE but some how screen shot of the same was not uploded in the thread. Along with this, one more issue what i found is that the pagination slider control in file explorer, does not align at its place. It moves below its position on load some times and some othe times realign properly.

    Regards,
    Srikanth
  5. Dobromir
    Admin
    Dobromir avatar
    1633 posts

    Posted 08 Sep 2010 Link to this post

    Hi Srikanth,

    Please accept my sincere apologies for the delayed answer.

    Now to your questions:
    1. As I said in my previous post RadFileExplorer does not provide the required functionality out of the box, adding attributes to the items in the content provider does not pass them to the RadTreeView's nodes. For your convenience I have prepared a sample page implementing this functionality. Please find it attached.
    2. I am not quite sure I understand this question. Could you please describe in more details what you are trying to achieve?
    3. This functionality is implemented in the attached sample page using the approach that I provided in my previous answer.
    4. _editNodeText(node, text, shouldPostback) is the private method responsible for the node rename. Since this is a private method it is highly not recommended to be used, because it may be changed in a future releases of RadControls for ASP.NET AJAX. You can find the corresponding public methods in the client-side API documentation
    5. We are aware of this issue and working on fixing it. Unfortunately, I am unable to provide a suitable workaround for the moment. Please excuse us for the inconvenience.

    All the best,
    Dobromir
    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
  6. srikanth
    srikanth avatar
    12 posts
    Member since:
    Aug 2010

    Posted 14 Sep 2010 Link to this post

    Hi Telerik,

    Here are my new questions:
    1. How to disable delete icon on the rad tool bar of fileexplorer for folders? I need this button to be enabled only when a file is selected. This delete should operate only on files shown in grid.
    2. How can i disable deletion of root level nodes? I need to diable delete context menu as well as button in toolbar for such nodes?
    3. As explained in the previous post #2, when you rename a folder, the new name is not shown on it immediately. After page refresh /reload only the new folder name is displayed.
    4. I want to display the processing image in the middle of RadGird (or any contril in general) in my application. However i could not achieve the same. The image is displayed at the top of grid. I need exactly same as it is available in fileexplorer whenever the control is refreshed/reloaded with data. I have followed some demos available online but could not acheive it.

    Regards,
    Srikanth
  7. srikanth
    srikanth avatar
    12 posts
    Member since:
    Aug 2010

    Posted 16 Sep 2010 Link to this post

    Hi telerik,

    In my previous post i had asked about disabling Delete button for folders. I could some how get this working using client side events of folderLoaded  event however if there is any other simple method available that would be great.

    Now what i have seen as a big issue is sorting of custom columns. In file explorer, i have added certain custom columns.What i was assuming is that the control will take care of sorting of such columns but it doesn't. When i click on such columns it just shows up and down arrow but nothing gets sorted. Am i missing anything here or does the control only supports sorting of Default columns?? I have even set the RadFileExplorer1.Grid.AllowSorting = True  in page load.
    Thecustom columns are
    1. LastModifiedDate - which is a datetime field
    2. FileType - string

    What is the work around for this? Should it be done in the code behind? Also what i think is currently sorting is going to happen on entire data even though we have enabled paging and page size is set as 50. Is there custom pagination based on say start and end index available?

    Please reply ASAP.

    Please note that our web application is using custom DBContentProvider.
  8. Fiko
    Admin
    Fiko avatar
    1406 posts

    Posted 17 Sep 2010 Link to this post

    Hi Srikanth,

    Straight to your questions:
    1. You can achieve the required functionality by attaching a handler to the RadFileExplorer's OnClientItemSelected client-side event. Here is a sample function that implements the required functionality:
      function explorerItemSelected(oExplorer, args)
      {
          var item = args.get_item(); //get reference to the selected Item
          var toolBar = oExplorer.get_toolbar(); //get reference to the ToolBar
          var deleteButton = toolBar.findItemByValue("Delete"); //get reference to the delete button
       
          if (item.isDirectory())//check if the selected item is file or folder
              deleteButton.disable();
          else
              deleteButton.enable();
      }
    2. By design, RadFileExplorer does not allow users to delete Root level folder.
    3. There was a problem with the custom DBContentProvider provided in the Live Demos. If you are using this provider could you please verify that you are using its latest version (you can find the code in this Code Library). If this is not the case, could you please provide your implementation so we can investigate it further?
    4. I am not quite sure I understand what exactly you are trying to achieve. Could you please provide me more information about your setup? Once I have a better view over your exact configuration, I can give you a working solution of the problem that you experience.

    For your convenience I have attached a working project to this thread.

    I hope this helps.

    Greetings,
    Fiko
    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
UI for ASP.NET Ajax is Ready for VS 2017