Purpose of FileItem.Extension

7 posts, 0 answers
  1. Michael
    Michael avatar
    12 posts
    Member since:
    Jul 2010

    Posted 26 Jul 2010 Link to this post

    Hi guys!
    What is the purpose of FileItem.Extension property?
    I'd like to show files without extensions with proper icons. So my original thought was to use FileItem.Extension but after debugging I have discovered that only file extension is used as additional class name.
    Is this an issue that Extension property is ignored and how can I show files with proper icons?
  2. Petio Petkov
    Admin
    Petio Petkov avatar
    825 posts

    Posted 29 Jul 2010 Link to this post

    Hello Michael,

    My suggestion is to add custom columns as in the "Add Custom Columns" example - all you need to do is to add a column with filename(without file extension) and hide the original fileName column. The code below illustrates how to show files without  their extensions:.
    Codebehind:
        public partial class DefaultCS : System.Web.UI.Page
        {
      
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    //be sure to set content provider first before doing anything involving paths (e.g. set InitialPath)
                    RadFileExplorer1.Configuration.ContentProviderTypeName = typeof(CustomColumnsContentProvider).AssemblyQualifiedName;
                    RadFileExplorer1.InitialPath = Page.ResolveUrl("~/FileExplorer/Examples/Default/Images/Northwind/Customers/");
                }
                AddDateAndOwnerColumns();
            }
      
            private void AddGridColumn(string name, string uniqueName, bool sortable)
            {
                  
                // Add a new column with the specified name
                GridTemplateColumn gridTemplateColumn1 = new GridTemplateColumn();
                gridTemplateColumn1.HeaderText = name;
                if (sortable)
                    gridTemplateColumn1.SortExpression = uniqueName;
                gridTemplateColumn1.UniqueName = uniqueName;
                gridTemplateColumn1.DataField = uniqueName;
      
                RadFileExplorer1.Grid.Columns.Add(gridTemplateColumn1);
            }
      
            private void AddDateAndOwnerColumns()
            {   
                    AddGridColumn("Creation Date", "Date", true);
                    AddGridColumn("Owner Name", "Owner", false);
                    AddGridColumn("FileWithoutExt", "FileWithoutExt", false);
            }
      
            protected void RadFileExplorer1_ExplorerPopulated(object sender, RadFileExplorerPopulatedEventArgs e)
            {
                //implement sorting for the custom Date column
                string sortingColumn = e.SortColumnName;
                if (sortingColumn == "Date")
                {
                    DateComparer dc = new DateComparer();
                    e.List.Sort(dc);
                    if (e.SortDirection.IndexOf("DESC") != -1)
                    {
                        //reverse order
                        e.List.Reverse();
                    }
                }
            }
            public class DateComparer : IComparer<FileBrowserItem>
            {
                int IComparer<FileBrowserItem>.Compare(FileBrowserItem item1, FileBrowserItem item2)
                {
                    //treat folders separate from files
                    DateTime date1 = DateTime.Parse(item1.Attributes["Date"]);
                    DateTime date2 = DateTime.Parse(item2.Attributes["Date"]);
                    if (item1 is DirectoryItem)
                    {
                        if (item2 is DirectoryItem)
                        {
                            return DateTime.Compare(date1, date2);
                        }
                        else
                        {
                            return -1;
                        }
                    }
                    else
                    {
                        if (item2 is DirectoryItem)
                        {
                            return 1;
                        }
                        else
                        {
                            return DateTime.Compare(date1, date2);
                        }
                    }
                }
            }
      
            public class CustomColumnsContentProvider : FileSystemContentProvider
            {
                public CustomColumnsContentProvider(HttpContext context, string[] searchPatterns, string[] viewPaths, string[] uploadPaths, string[] deletePaths, string selectedUrl, string selectedItemTag)
                    : base(context, searchPatterns, viewPaths, uploadPaths, deletePaths, selectedUrl, selectedItemTag)
                {
                    // Declaring a constructor is required when creating a custom content provider class
                }
      
                public override DirectoryItem ResolveDirectory(string path)
                {
                    // Update all file items with the additional information (date, owner)
                    DirectoryItem oldItem = base.ResolveDirectory(path);
      
                    foreach (FileItem fileItem in oldItem.Files)
                    {
                        // Get the information from the physical file
                        FileInfo fInfo = new FileInfo(Context.Server.MapPath(VirtualPathUtility.AppendTrailingSlash(oldItem.Path) + fileItem.Name));
      
                        // Add the information to the attributes collection of the item. It will be automatically picked up by the FileExplorer
                        // If the name attribute matches the unique name of a grid column
                          
                        fileItem.Attributes.Add("Date", fInfo.CreationTime.ToString());
                        fileItem.Attributes.Add("FileWithoutExt", fInfo.Name.Remove(fInfo.Name.LastIndexOf(fInfo.Extension)) );
                        // Type targetType = typeof(System.Security.Principal.NTAccount);
                        // string value = fInfo.GetAccessControl().GetOwner(targetType).Value.Replace("\\", "\\\\");
                        string ownerName = "Telerik";
                        fileItem.Attributes.Add("Owner", ownerName);
                    }
      
                    return oldItem;
                }
      
                public override DirectoryItem ResolveRootDirectoryAsTree(string path)
                {
                    // Update all directory items with the additional information (date, owner)
                    DirectoryItem oldItem = base.ResolveRootDirectoryAsTree(path);
      
                    foreach (DirectoryItem dirItem in oldItem.Directories)
                    {
                        // Get the information from the physical directory
                        DirectoryInfo dInfo = new DirectoryInfo(Context.Server.MapPath(VirtualPathUtility.AppendTrailingSlash(dirItem.Path)));
      
                        // Add the information to the attributes collection of the item. It will be automatically picked up by the FileExplorer
                        // If the name attribute matches the unique name of a grid column
      
                        dirItem.Attributes.Add("Date", dInfo.LastWriteTime.ToString());
      
                        //Type targetType = typeof(System.Security.Principal.NTAccount);
                        //string value = dInfo.GetAccessControl().GetOwner(targetType).Value.Replace("\\", "\\\\");
                        string ownerName = "Telerik";
                        dirItem.Attributes.Add("Owner", ownerName);
                    }
                    return oldItem;
                }
            }
        }
    }
    Please note that I'm using fInfo.Extension property and everything is fine.
    Hope this helps.


    Best wishes,
    Petio Petkov
    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. Michael
    Michael avatar
    12 posts
    Member since:
    Jul 2010

    Posted 02 Aug 2010 Link to this post

    Hi Petio!
    Ok, thank you. I'll try this approach.
  5. grant
    grant avatar
    4 posts
    Member since:
    Aug 2010

    Posted 18 Aug 2010 Link to this post

    Hi Petio

    it's a great direction you provide.
    however, Could you tell me how to add image icon before the name?

    thank you very much!
  6. grant
    grant avatar
    4 posts
    Member since:
    Aug 2010

    Posted 18 Aug 2010 Link to this post

    hi Michael

    have you solve your problem?
    the problem is to show files without extensions with proper icons.
    if yes, could you tell me how?
    i have the same problem. it really freak me out.

    thank you very much! 
  7. Michael
    Michael avatar
    12 posts
    Member since:
    Jul 2010

    Posted 18 Aug 2010 Link to this post

    Hi grant!
    I was scared by the number of lines of code proposed by Petio, so decided to show files with extensions.
    If file name includes extension- everything works fine and I can see proper icons.
  8. Fiko
    Admin
    Fiko avatar
    1406 posts

    Posted 20 Aug 2010 Link to this post

    Hello Guys,

    In case that you need to override the icon for the unknown files (used when a file does not have any extension, for example) then you need to change the sprite fileextensionsprites.png. (icon number 22). More details how to do that can be found in this forum thread.


    Kind regards,
    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