DevExpress社のASP.NETのASPxFileManagerを利用して、ファイルを使用せずにサムネイル表示させる。ファイルを使用しないことで、コメントなど様々な付加情報を表示させることができる。
DevExpress社のASP.NETのASPxFileManagerでは、通常ファイルを使用して
サムネイル表示させるが、今回はコメントなど様々な付加情報を表示させるため、
任意のデータからサムネイル表示させる。
手順は以下の通り
①ファイル情報を格納するクラスの作成
↓
②ファイルやフォルダーの検索などを行うプロバイダークラスの作成
↓
③上記で作成したクラスの使用
1.ファイル情報を格納するクラスの作成
ASPxFileManagerでは、通常、フォルダーにはFileManagerFolder、ファイルにはFileManagerFileのクラスを使うが今回は任意のクラスであるFileSystemDataを利用する。
FileSystemData.cs
1 2 3 4 5 6 7 8 9 10 |
public class FileSystemData { public string Id { get; set; } public string ParentId { get; set; } public string Name { get; set; } public bool IsFolder { get; set; } public Byte[] Data { get; set; } public string Thumbnail { get; set; } public string LastWriteTime { get; set; } } |
2.プロバイダークラスの作成
ASPxFileManagerでは、ファイルを使用しないため、任意のプロバイダークラスの作成する。
CustomFileProvider.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
public class CustomFileProvider : FileSystemProviderBase { FileSystemData root = new FileSystemData(); List DataSource { get { return (List)HttpContext.Current.Session["DataSource"]; } } public CustomFileProvider(string rootFolder) : base(rootFolder) { } public override string RootFolderDisplayName { get { return GetRootFolder().Name; } } public override string GetThumbnailUrl(FileManagerFile file) { var thumbnailUrl = ""; var fitem = this.FindFileItem(file); if (fitem != null) { thumbnailUrl = "../Content/Images/Thumbnail/" + fitem.Thumbnail; } return thumbnailUrl; } public override bool Exists(FileManagerFile file) { return this.FindFileItem(file) != null; } public override bool Exists(FileManagerFolder folder) { return this.FindFolderItem(folder) != null; } public override System.IO.Stream ReadFile(FileManagerFile file) { return new MemoryStream(FindFileItem(file).Data.ToArray()); } public override DateTime GetLastWriteTime(FileManagerFile file) { var dbFileItem = FindFileItem(file); var dt = DateTime.Now; if (!string.IsNullOrEmpty(dbFileItem.LastWriteTime)) { dt = DateTime.Parse(dbFileItem.LastWriteTime); } return dt; } public override IEnumerable GetFolders(FileManagerFolder parentFolder) { var dbFolderItem = this.FindFolderItem(parentFolder); var folders = this.DataSource .Where(x => x.IsFolder && x.ParentId == dbFolderItem.Id) .Select(x => new FileManagerFolder(this, parentFolder, x.Name)) .ToArray(); return folders; } public override IEnumerable GetFiles(FileManagerFolder folder) { var folderItem = this.FindFolderItem(folder); var files = this.DataSource .Where(x => !x.IsFolder && x.ParentId == folderItem.Id) .Select(x => new FileManagerFile(this, folder, x.Name)) .ToArray(); return files; } protected FileSystemData FindFolderItem(FileManagerFolder folder) { var folders = this.DataSource.Where(x => x.IsFolder); var folderItem = this.DataSource .Where(x => x.IsFolder && GetRelativeName(x) == folder.RelativeName) .FirstOrDefault(); return folderItem; } protected string GetRelativeName(FileSystemData folder) { var root = this.GetRootFolder(); if (folder.Id == root.Id) { return string.Empty; } if (folder.ParentId == root.Id) { return folder.Name; } var folders = this.DataSource.Where(x => x.IsFolder); string name = this.GetRelativeName(folders.Where(x => x.Id == folder.ParentId).FirstOrDefault()); return name == null ? null : Path.Combine(name, folder.Name); } private FileSystemData GetRootFolder() { var root = this.DataSource .Where(x => x.IsFolder && x.ParentId == null) .FirstOrDefault(); return root; } protected FileSystemData FindFileItem(FileManagerFile file) { var folderItem = this.FindFolderItem(file.Folder); if (folderItem == null) { return null; } var files = this.DataSource.Where(x => !x.IsFolder).ToList(); var data = files.Where(x => x.ParentId == folderItem.Id && !x.IsFolder && x.Name == file.Name) .FirstOrDefault(); return data; } } |
3.上記で作成したクラスの使用
ASPxFileManagerにカスタムプロバイダークラスを使用することを設定する。
Portal.aspx
1 2 3 4 5 6 7 8 |
<dx:ASPxFileManager ID="ASPxFileManager1" runat="server" EnableTheming="True" Theme="Office2010Silver" CustomFileSystemProviderTypeName="DXWebMap.View.CustomFileProvider"> <SettingsFileList> <ThumbnailsViewSettings ThumbnailWidth="100" ThumbnailHeight="100" /> </SettingsFileList> <SettingsDataSource KeyFieldName="Id" ParentKeyFieldName="ParentID" NameFieldName="Name" IsFolderFieldName="IsFolder" FileBinaryContentFieldName="Data" LastWriteTimeFieldName="LastWriteTime" /> <SettingsUpload Enabled="false" /> <SettingsAdaptivity Enabled="true" /> </dx:ASPxFileManager> |
ページロード時に、セッションに初期データを登録しておく
WebForm.aspx.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
public partial class Portal : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (this.Session["DataSource"] == null) { var slist = new List(); var item1 = new FileSystemData(); item1.Id = "1"; item1.ParentId = null; item1.Name = "Maps"; item1.IsFolder = true; item1.LastWriteTime = null; slist.Add(item1); var item11 = new FileSystemData(); item11.Id = "11"; item11.ParentId = "1"; item11.Name = "総務課"; item11.IsFolder = true; item11.LastWriteTime = null; slist.Add(item11); var item111 = new FileSystemData(); item111.Id = "111"; item111.ParentId = "11"; item111.Name = "空き家"; item111.IsFolder = false; item111.Thumbnail = "akiya.jpg"; item111.LastWriteTime = null; slist.Add(item111); var item112 = new FileSystemData(); item112.Id = "112"; item112.ParentId = "11"; item112.Name = "防災"; item112.IsFolder = false; item112.Thumbnail = "dosyasai.png"; item112.LastWriteTime = null; slist.Add(item112); var item12 = new FileSystemData(); item12.Id = "12"; item12.ParentId = "1"; item12.Name = "福祉課"; item12.IsFolder = true; item12.LastWriteTime = null; slist.Add(item12); var item121 = new FileSystemData(); item121.Id = "121"; item121.ParentId = "12"; item121.Name = "要援護者"; item121.IsFolder = false; item121.Thumbnail = "yourngo.png"; item121.LastWriteTime = null; slist.Add(item121); this.Session["DataSource"] = slist; } // ASPxFileManager1.CustomFileSystemProvider = new CustomFileProvider("Maps"); } |