Skip to main content
A newer version of this page is available. .

Binding to Custom File System Provider

  • 2 minutes to read

FileManager allows you to implement a custom system provider.

To create a custom provider, follow the steps below.

  1. Create your own provider class by inheriting it from the base FileSystemProviderBase class.

    public class LinqFileSystemProvider : FileSystemProviderBase {
         ...
    }
    
  2. Provide implementation for the required virtual methods in your class. If you inherit from FileSystemProviderBase, the implementation of the following methods is essential:

    public class LinqFileSystemProvider : FileSystemProviderBase {
    
         ...
    
         public override IEnumerable<FileManagerFile> GetFiles(FileManagerFolder folder) {
              DbFileSystemItem dbFolderItem = FindDbFolderItem(folder);
                   return
                   from dbItem in DataContext.DbFileSystemItems
                   where !dbItem.IsFolder && dbItem.ParentId == dbFolderItem.Id
                   select new FileManagerFile(this, folder, dbItem.Name);
         }
         public override IEnumerable<FileManagerFolder> GetFolders(FileManagerFolder parentFolder) {
              DbFileSystemItem dbFolderItem = FindDbFolderItem(parentFolder);
              return
              from dbItem in FolderCache.Values
              where dbItem.IsFolder && dbItem.ParentId == dbFolderItem.Id
              select new FileManagerFolder(this, parentFolder, dbItem.Name);
         }
         public override bool Exists(FileManagerFile file) {
              return FindDbFileItem(file) != null;
         }
         public override bool Exists(FileManagerFolder folder) {
              return FindDbFolderItem(folder) != null;
         }
         public override System.IO.Stream ReadFile(FileManagerFile file) {
              return new MemoryStream(FindDbFileItem(file).Data.ToArray());
         }
    }
    
  3. Bind the FileManager to your provider class instance via the FileManagerExtension.BindToFileSystemProvider method. FileManager will use your custom provider to access data.

    Controller code:

    
    using System.Web.Mvc;
    
    namespace MyProject {
        public partial class HomeController : Controller {
    
            public MyProject.Models.LinqFileSystemProvider dataSource = new MyProject.Models.LinqFileSystemProvider();
            public ActionResult Index() {
                return View(dataSource);
            }
            [ValidateInput(false)]
            public ActionResult DataBindingPartial() {
                return View("DataBindingPartial", dataSource);
            }
        }
    }
    

    View code:

    
    @model LinqFileSystemProvider
    
    @using(Html.BeginForm()) {
        @Html.Partial("DataBindingPartial", Model)
    }
    

    Partial View code (“DataBindingPartial.cshtml”):

    
    @Html.DevExpress().FileManager(
        settings => {
            settings.Name = "fileManager";
            settings.CallbackRouteValues = new { Controller = "Home", Action = "DataBindingPartial" };
    
            settings.Settings.InitialFolder = "Salvador Dali\\1936 - 1945"; // Folder within the data source
            settings.Settings.ThumbnailFolder = Url.Content("~/Content/FileManager/Thumbnails"); 
    
            settings.SettingsEditing.AllowCreate = true;
            settings.SettingsEditing.AllowDelete = true;
            settings.SettingsEditing.AllowMove = true;
            settings.SettingsEditing.AllowRename = true;
        }
    ).BindToFileSystemProvider(Model)
    .GetHtml()
    

Online Demo

See Also