How to: Implement a LINQ to SQL Based File System Provider
- 11 minutes to read
This example shows how to create a LINQ to SQL based file system provider for the ASPxFileManager. The provider retrieves data from DataContext connected to a database containing file/folder structure and contents. To improve performance, we do the following:- Cache a folder list in memory to decrease the number of recursive LINQ to SQL queries made to a database (see the FolderCache property and the RefreshFolderCache method).- Use delayed loading for the Data property mapped to a database field that stores file contents (the Delay Loaded property is set to True for this property in the DbFileSystemItem entity class).Seealso:E5024: ASPxFileManager - How to implement a List data bound custom file system provider
Note
A complete sample project is available at https://github.com/DevExpress-Examples/aspxfilemanager-how-to-implement-a-linq-to-sql-based-file-system-provider-e2900
- Default.aspx.cs
- Default.aspx (C#)
- LinqFileSystemProvider.cs
- Default.aspx (VB.NET)
- LinqFileSystemProvider.vb
- Default.aspx.vb
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DevExpress.Web;
public partial class _Default : System.Web.UI.Page
{
protected void ASPxFileManager1_ItemDeleting(object source, DevExpress.Web.FileManagerItemDeleteEventArgs e) {
ValidateSiteMode(e);
}
protected void ASPxFileManager1_ItemMoving(object source, DevExpress.Web.FileManagerItemMoveEventArgs e) {
ValidateSiteMode(e);
}
protected void ASPxFileManager1_ItemRenaming(object source, DevExpress.Web.FileManagerItemRenameEventArgs e) {
ValidateSiteMode(e);
}
protected void ASPxFileManager1_FolderCreating(object source, DevExpress.Web.FileManagerFolderCreateEventArgs e) {
ValidateSiteMode(e);
}
protected void ASPxFileManager1_FileUploading(object source, DevExpress.Web.FileManagerFileUploadEventArgs e) {
ValidateSiteMode(e);
}
protected void ASPxFileManager1_ItemCopying(object source, FileManagerItemCopyEventArgs e) {
ValidateSiteMode(e);
}
protected void ValidateSiteMode(FileManagerActionEventArgsBase e) {
e.Cancel = true;
e.ErrorText = "Data modifications are not allowed in the example.";
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="DevExpress.Web.v15.1, Version=15.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web" TagPrefix="dx" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<dx:ASPxFileManager ID="ASPxFileManager1" runat="server" SettingsUpload-AdvancedModeSettings-EnableMultiSelect="true"
OnFileUploading="ASPxFileManager1_FileUploading"
OnFolderCreating="ASPxFileManager1_FolderCreating"
OnItemDeleting="ASPxFileManager1_ItemDeleting"
OnItemMoving="ASPxFileManager1_ItemMoving"
OnItemRenaming="ASPxFileManager1_ItemRenaming"
OnItemCopying="ASPxFileManager1_ItemCopying"
CustomFileSystemProviderTypeName="LinqFileSystemProvider">
<Settings RootFolder="a1" ThumbnailFolder="~\Thumb\" />
<SettingsDataSource />
<SettingsEditing AllowCreate="True" AllowDelete="True" AllowMove="True" AllowRename="True" AllowCopy="true" />
<SettingsFileList View="Thumbnails"></SettingsFileList>
</dx:ASPxFileManager>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using DevExpress.Web;
using System.IO;
public class LinqFileSystemProvider : FileSystemProviderBase {
const int DbRootItemId = 1;
DbFileSystemDataContext dataContext;
Dictionary<int, DbFileSystemItem> folderCache;
string rootFolderDisplayName;
public LinqFileSystemProvider(string rootFolder)
: base(rootFolder) {
this.dataContext = new DbFileSystemDataContext();
RefreshFolderCache();
}
public DbFileSystemDataContext DataContext { get { return dataContext; } }
// Used to decrease the number of recursive LINQ to SQL queries made to a database
public Dictionary<int, DbFileSystemItem> FolderCache { get { return folderCache; } }
public override string RootFolderDisplayName { get { return rootFolderDisplayName; } }
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, dbItem.Id.ToString());
}
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, dbItem.Id.ToString());
}
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());
}
public override DateTime GetLastWriteTime(FileManagerFile file) {
var dbFileItem = FindDbFileItem(file);
return dbFileItem.LastWriteTime.GetValueOrDefault(DateTime.Now);
}
// File/folder management operations
public override void CreateFolder(FileManagerFolder parent, string name) {
UpdateAndSubmitChanges(parent,
dbItem => DataContext.DbFileSystemItems.InsertOnSubmit(new DbFileSystemItem() {
IsFolder = true,
LastWriteTime = DateTime.Now,
Name = name,
ParentId = dbItem.Id
}));
}
public override void DeleteFile(FileManagerFile file) {
UpdateAndSubmitChanges(file, dbItem => DataContext.DbFileSystemItems.DeleteOnSubmit(dbItem));
}
public override void DeleteFolder(FileManagerFolder folder) {
UpdateAndSubmitChanges(folder, dbItem => DataContext.DbFileSystemItems.DeleteOnSubmit(dbItem));
}
public override void MoveFile(FileManagerFile file, FileManagerFolder newParentFolder) {
UpdateAndSubmitChanges(file, dbItem => dbItem.ParentId = FindDbFolderItem(newParentFolder).Id);
}
public override void MoveFolder(FileManagerFolder folder, FileManagerFolder newParentFolder) {
UpdateAndSubmitChanges(folder, dbItem => dbItem.ParentId = FindDbFolderItem(newParentFolder).Id);
}
public override void RenameFile(FileManagerFile file, string name) {
UpdateAndSubmitChanges(file, dbItem => dbItem.Name = name);
}
public override void RenameFolder(FileManagerFolder folder, string name) {
UpdateAndSubmitChanges(folder, dbItem => dbItem.Name = name);
}
public override void UploadFile(FileManagerFolder folder, string fileName, Stream content) {
UpdateAndSubmitChanges(folder,
dbItem => DataContext.DbFileSystemItems.InsertOnSubmit(new DbFileSystemItem() {
Name = fileName,
Data = ReadAllBytes(content),
ParentId = dbItem.Id,
LastWriteTime = DateTime.Now,
IsFolder = false
}));
}
public override void CopyFile(FileManagerFile file, FileManagerFolder newParentFolder) {
var dbFileItem = FindDbFileItem(file);
CopyCore(dbFileItem, newParentFolder.RelativeName, false);
}
public override void CopyFolder(FileManagerFolder folder, FileManagerFolder newParentFolder) {
List<FileManagerFolder> folders = new List<FileManagerFolder>();
FillSubFoldersList(folder, folders);
int folderNameOffset = !string.IsNullOrEmpty(folder.Parent.RelativeName) ? folder.Parent.RelativeName.Length + 1 : 0;
foreach (FileManagerFolder copyingFolder in folders) {
DbFileSystemItem dbFolderItem = FindDbFolderItem(copyingFolder);
string folderPath = newParentFolder.RelativeName;
if (copyingFolder != folder)
folderPath = Path.Combine(folderPath, copyingFolder.Parent.RelativeName.Substring(folderNameOffset));
CopyCore(dbFolderItem, folderPath, true);
foreach (FileManagerFile currentFile in copyingFolder.GetFiles()) {
DbFileSystemItem dbFileItem = FindDbFileItem(currentFile);
CopyCore(dbFileItem, Path.Combine(folderPath, copyingFolder.Name), false);
}
}
}
void FillSubFoldersList(FileManagerFolder folder, List<FileManagerFolder> list) {
list.Add(folder);
foreach (FileManagerFolder subFolder in folder.GetFolders())
FillSubFoldersList(subFolder, list);
}
void CopyCore(DbFileSystemItem item, string path, bool isFolder) {
FileManagerFolder newParentFolder = new FileManagerFolder(this, path);
UpdateAndSubmitChanges(newParentFolder,
dbItem => DataContext.DbFileSystemItems.InsertOnSubmit(new DbFileSystemItem() {
Name = item.Name,
Data = item.Data,
ParentId = dbItem.Id,
LastWriteTime = DateTime.Now,
IsFolder = isFolder
}));
}
protected void UpdateAndSubmitChanges(FileManagerFile file, Action<DbFileSystemItem> update) {
UpdateAndSubmitChangesCore(FindDbFileItem(file), update);
}
protected void UpdateAndSubmitChanges(FileManagerFolder folder, Action<DbFileSystemItem> update) {
UpdateAndSubmitChangesCore(FindDbFolderItem(folder), update);
}
protected void UpdateAndSubmitChangesCore(DbFileSystemItem dbitem, Action<DbFileSystemItem> update) {
update(dbitem);
DataContext.SubmitChanges();
RefreshFolderCache();
}
protected DbFileSystemItem FindDbFileItem(FileManagerFile file) {
DbFileSystemItem dbFolderItem = FindDbFolderItem(file.Folder);
if (dbFolderItem == null)
return null;
return
(from dbItem in DataContext.DbFileSystemItems
where dbItem.ParentId == dbFolderItem.Id && !dbItem.IsFolder && dbItem.Name == file.Name
select dbItem).FirstOrDefault();
}
protected DbFileSystemItem FindDbFolderItem(FileManagerFolder folder) {
return
(from dbItem in FolderCache.Values
where dbItem.IsFolder && GetRelativeName(dbItem) == folder.RelativeName
select dbItem).FirstOrDefault();
}
// Returns the path to a specified folder relative to a root folder
protected string GetRelativeName(DbFileSystemItem dbFolder) {
if (dbFolder.Id == DbRootItemId) return string.Empty;
if (dbFolder.ParentId == DbRootItemId) return dbFolder.Name;
if (!FolderCache.ContainsKey(dbFolder.ParentId)) return null;
string name = GetRelativeName(FolderCache[dbFolder.ParentId]);
return name == null ? null : Path.Combine(name, dbFolder.Name);
}
// Caches folder names in memory and obtains a root folder's name
protected void RefreshFolderCache() {
this.folderCache = (
from dbItem in DataContext.DbFileSystemItems
where dbItem.IsFolder
select dbItem
).ToDictionary(i => i.Id);
this.rootFolderDisplayName = (
from dbItem in FolderCache.Values
where dbItem.Id == DbRootItemId
select dbItem.Name).First();
}
protected static byte[] ReadAllBytes(Stream stream) {
byte[] buffer = new byte[16 * 1024];
int readCount;
using (MemoryStream ms = new MemoryStream()) {
while ((readCount = stream.Read(buffer, 0, buffer.Length)) > 0) {
ms.Write(buffer, 0, readCount);
}
return ms.ToArray();
}
}
// Get file size (length).
public override long GetLength(FileManagerFile file) {
return FindDbFileItem(file).Data.Length;
}
}
<%@ Page Language="vb" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<%@ Register Assembly="DevExpress.Web.v15.1, Version=15.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web" TagPrefix="dx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<dx:ASPxFileManager ID="ASPxFileManager1" runat="server"
OnFileUploading="ASPxFileManager1_FileUploading"
OnFolderCreating="ASPxFileManager1_FolderCreating"
OnItemDeleting="ASPxFileManager1_ItemDeleting"
OnItemMoving="ASPxFileManager1_ItemMoving"
OnItemRenaming="ASPxFileManager1_ItemRenaming"
OnItemCopying="ASPxFileManager1_ItemCopying"
CustomFileSystemProviderTypeName="LinqFileSystemProvider">
<Settings RootFolder="a1" ThumbnailFolder="~\Thumb\" />
<SettingsDataSource />
<SettingsEditing AllowCreate="True" AllowDelete="True" AllowMove="True" AllowRename="True" AllowCopy="true" />
<SettingsFileList View="Thumbnails"></SettingsFileList>
</dx:ASPxFileManager>
</form>
</body>
</html>
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports DevExpress.Web
Imports System.IO
Public Class LinqFileSystemProvider
Inherits FileSystemProviderBase
Private Const DbRootItemId As Integer = 1
Private dataContext_Renamed As DbFileSystemDataContext
Private folderCache_Renamed As Dictionary(Of Integer, DbFileSystemItem)
Private rootFolderDisplayName_Renamed As String
Public Sub New(ByVal rootFolder As String)
MyBase.New(rootFolder)
Me.dataContext_Renamed = New DbFileSystemDataContext()
RefreshFolderCache()
End Sub
Public ReadOnly Property DataContext() As DbFileSystemDataContext
Get
Return dataContext_Renamed
End Get
End Property
' Used to decrease the number of recursive LINQ to SQL queries made to a database
Public ReadOnly Property FolderCache() As Dictionary(Of Integer, DbFileSystemItem)
Get
Return folderCache_Renamed
End Get
End Property
Public Overrides ReadOnly Property RootFolderDisplayName() As String
Get
Return rootFolderDisplayName_Renamed
End Get
End Property
Public Overrides Function GetFiles(ByVal folder As FileManagerFolder) As IEnumerable(Of FileManagerFile)
Dim dbFolderItem As DbFileSystemItem = FindDbFolderItem(folder)
Return _
From dbItem In DataContext.DbFileSystemItems _
Where (Not dbItem.IsFolder) AndAlso dbItem.ParentId = dbFolderItem.Id _
Select New FileManagerFile(Me, folder, dbItem.Name, dbItem.Id.ToString())
End Function
Public Overrides Function GetFolders(ByVal parentFolder As FileManagerFolder) As IEnumerable(Of FileManagerFolder)
Dim dbFolderItem As DbFileSystemItem = FindDbFolderItem(parentFolder)
Return _
From dbItem In FolderCache.Values _
Where dbItem.IsFolder AndAlso dbItem.ParentId = dbFolderItem.Id _
Select New FileManagerFolder(Me, parentFolder, dbItem.Name, dbItem.Id.ToString())
End Function
Public Overrides Function Exists(ByVal file As FileManagerFile) As Boolean
Return FindDbFileItem(file) IsNot Nothing
End Function
Public Overrides Function Exists(ByVal folder As FileManagerFolder) As Boolean
Return FindDbFolderItem(folder) IsNot Nothing
End Function
Public Overrides Function ReadFile(ByVal file As FileManagerFile) As System.IO.Stream
Return New MemoryStream(FindDbFileItem(file).Data.ToArray())
End Function
Public Overrides Function GetLastWriteTime(ByVal file As FileManagerFile) As DateTime
Dim dbFileItem = FindDbFileItem(file)
Return dbFileItem.LastWriteTime.GetValueOrDefault(DateTime.Now)
End Function
' File/folder management operations
Public Overrides Sub CreateFolder(ByVal parent As FileManagerFolder, ByVal name As String)
UpdateAndSubmitChanges(parent, Sub(dbItem) DataContext.DbFileSystemItems.InsertOnSubmit(New DbFileSystemItem() With {.IsFolder = True, .LastWriteTime = DateTime.Now, .Name = name, .ParentId = dbItem.Id}))
End Sub
Public Overrides Sub DeleteFile(ByVal file As FileManagerFile)
UpdateAndSubmitChanges(file, Sub(dbItem) DataContext.DbFileSystemItems.DeleteOnSubmit(dbItem))
End Sub
Public Overrides Sub DeleteFolder(ByVal folder As FileManagerFolder)
UpdateAndSubmitChanges(folder, Sub(dbItem) DataContext.DbFileSystemItems.DeleteOnSubmit(dbItem))
End Sub
Public Overrides Sub MoveFile(ByVal file As FileManagerFile, ByVal newParentFolder As FileManagerFolder)
UpdateAndSubmitChanges(file, Sub(dbItem) dbItem.ParentId = FindDbFolderItem(newParentFolder).Id)
End Sub
Public Overrides Sub MoveFolder(ByVal folder As FileManagerFolder, ByVal newParentFolder As FileManagerFolder)
UpdateAndSubmitChanges(folder, Sub(dbItem) dbItem.ParentId = FindDbFolderItem(newParentFolder).Id)
End Sub
Public Overrides Sub RenameFile(ByVal file As FileManagerFile, ByVal name As String)
UpdateAndSubmitChanges(file, Sub(dbItem) dbItem.Name = name)
End Sub
Public Overrides Sub RenameFolder(ByVal folder As FileManagerFolder, ByVal name As String)
UpdateAndSubmitChanges(folder, Sub(dbItem) dbItem.Name = name)
End Sub
Public Overrides Sub UploadFile(ByVal folder As FileManagerFolder, ByVal fileName As String, ByVal content As Stream)
UpdateAndSubmitChanges(folder, Sub(dbItem) DataContext.DbFileSystemItems.InsertOnSubmit(New DbFileSystemItem() With {.Name = fileName, .Data = ReadAllBytes(content), .ParentId = dbItem.Id, .LastWriteTime = DateTime.Now, .IsFolder = False}))
End Sub
Public Overrides Sub CopyFile(ByVal file As FileManagerFile, ByVal newParentFolder As FileManagerFolder)
Dim dbFileItem = FindDbFileItem(file)
CopyCore(dbFileItem, newParentFolder.RelativeName, False)
End Sub
Public Overrides Sub CopyFolder(ByVal folder As FileManagerFolder, ByVal newParentFolder As FileManagerFolder)
Dim folders As New List(Of FileManagerFolder)()
FillSubFoldersList(folder, folders)
Dim folderNameOffset As Integer = If((Not String.IsNullOrEmpty(folder.Parent.RelativeName)), folder.Parent.RelativeName.Length + 1, 0)
For Each copyingFolder As FileManagerFolder In folders
Dim dbFolderItem As DbFileSystemItem = FindDbFolderItem(copyingFolder)
Dim folderPath As String = newParentFolder.RelativeName
If copyingFolder IsNot folder Then
folderPath = Path.Combine(folderPath, copyingFolder.Parent.RelativeName.Substring(folderNameOffset))
End If
CopyCore(dbFolderItem, folderPath, True)
For Each currentFile As FileManagerFile In copyingFolder.GetFiles()
Dim dbFileItem As DbFileSystemItem = FindDbFileItem(currentFile)
CopyCore(dbFileItem, Path.Combine(folderPath, copyingFolder.Name), False)
Next currentFile
Next copyingFolder
End Sub
Private Sub FillSubFoldersList(ByVal folder As FileManagerFolder, ByVal list As List(Of FileManagerFolder))
list.Add(folder)
For Each subFolder As FileManagerFolder In folder.GetFolders()
FillSubFoldersList(subFolder, list)
Next subFolder
End Sub
Private Sub CopyCore(ByVal item As DbFileSystemItem, ByVal path As String, ByVal isFolder As Boolean)
Dim newParentFolder As New FileManagerFolder(Me, path)
UpdateAndSubmitChanges(newParentFolder, Sub(dbItem) DataContext.DbFileSystemItems.InsertOnSubmit(New DbFileSystemItem() With {.Name = item.Name, .Data = item.Data, .ParentId = dbItem.Id, .LastWriteTime = DateTime.Now, .IsFolder = isFolder}))
End Sub
Protected Sub UpdateAndSubmitChanges(ByVal file As FileManagerFile, ByVal update As Action(Of DbFileSystemItem))
UpdateAndSubmitChangesCore(FindDbFileItem(file), update)
End Sub
Protected Sub UpdateAndSubmitChanges(ByVal folder As FileManagerFolder, ByVal update As Action(Of DbFileSystemItem))
UpdateAndSubmitChangesCore(FindDbFolderItem(folder), update)
End Sub
Protected Sub UpdateAndSubmitChangesCore(ByVal dbitem As DbFileSystemItem, ByVal update As Action(Of DbFileSystemItem))
update(dbitem)
DataContext.SubmitChanges()
RefreshFolderCache()
End Sub
Protected Function FindDbFileItem(ByVal file As FileManagerFile) As DbFileSystemItem
Dim dbFolderItem As DbFileSystemItem = FindDbFolderItem(file.Folder)
If dbFolderItem Is Nothing Then
Return Nothing
End If
Return ( _
From dbItem In DataContext.DbFileSystemItems _
Where dbItem.ParentId = dbFolderItem.Id AndAlso (Not dbItem.IsFolder) AndAlso dbItem.Name = file.Name _
Select dbItem).FirstOrDefault()
End Function
Protected Function FindDbFolderItem(ByVal folder As FileManagerFolder) As DbFileSystemItem
Return ( _
From dbItem In FolderCache.Values _
Where dbItem.IsFolder AndAlso GetRelativeName(dbItem) = folder.RelativeName _
Select dbItem).FirstOrDefault()
End Function
' Returns the path to a specified folder relative to a root folder
Protected Function GetRelativeName(ByVal dbFolder As DbFileSystemItem) As String
If dbFolder.Id = DbRootItemId Then
Return String.Empty
End If
If dbFolder.ParentId = DbRootItemId Then
Return dbFolder.Name
End If
If (Not FolderCache.ContainsKey(dbFolder.ParentId)) Then
Return Nothing
End If
Dim name As String = GetRelativeName(FolderCache(dbFolder.ParentId))
If name Is Nothing Then
Return Nothing
Else
Return Path.Combine(name, dbFolder.Name)
End If
End Function
' Caches folder names in memory and obtains a root folder's name
Protected Sub RefreshFolderCache()
Me.folderCache_Renamed = ( _
From dbItem In DataContext.DbFileSystemItems _
Where dbItem.IsFolder _
Select dbItem).ToDictionary(Function(i) i.Id)
Me.rootFolderDisplayName_Renamed = ( _
From dbItem In FolderCache.Values _
Where dbItem.Id = DbRootItemId _
Select dbItem.Name).First()
End Sub
Protected Shared Function ReadAllBytes(ByVal stream As Stream) As Byte()
Dim buffer(16 * 1024 - 1) As Byte
Dim readCount As Integer
Using ms As New MemoryStream()
readCount = stream.Read(buffer, 0, buffer.Length)
Do While readCount > 0
ms.Write(buffer, 0, readCount)
readCount = stream.Read(buffer, 0, buffer.Length)
Loop
Return ms.ToArray()
End Using
End Function
' Get file size (length).
Public Overrides Function GetLength(ByVal file As FileManagerFile) As Long
Return FindDbFileItem(file).Data.Length
End Function
End Class
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports DevExpress.Web
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub ASPxFileManager1_ItemDeleting(ByVal source As Object, ByVal e As DevExpress.Web.FileManagerItemDeleteEventArgs)
ValidateSiteMode(e)
End Sub
Protected Sub ASPxFileManager1_ItemMoving(ByVal source As Object, ByVal e As DevExpress.Web.FileManagerItemMoveEventArgs)
ValidateSiteMode(e)
End Sub
Protected Sub ASPxFileManager1_ItemRenaming(ByVal source As Object, ByVal e As DevExpress.Web.FileManagerItemRenameEventArgs)
ValidateSiteMode(e)
End Sub
Protected Sub ASPxFileManager1_FolderCreating(ByVal source As Object, ByVal e As DevExpress.Web.FileManagerFolderCreateEventArgs)
ValidateSiteMode(e)
End Sub
Protected Sub ASPxFileManager1_FileUploading(ByVal source As Object, ByVal e As DevExpress.Web.FileManagerFileUploadEventArgs)
ValidateSiteMode(e)
End Sub
Protected Sub ASPxFileManager1_ItemCopying(ByVal source As Object, ByVal e As FileManagerItemCopyEventArgs)
ValidateSiteMode(e)
End Sub
Protected Sub ValidateSiteMode(ByVal e As FileManagerActionEventArgsBase)
e.Cancel = True
e.ErrorText = "Data modifications are not allowed in the example."
End Sub
End Class