帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:控制  FOLD  数据  数据源  


示例图像- screenshot.gif

介绍

在 ASP.NET 2.0中,通过数据源控件处理网页中的数据。 这些是从 DataSourceControl 派生的非可视控件。 常见的例子是 SqlDataSourceAccessDataSource

以前,我想做一个简单的文件管理器。 为此,我需要 List 文件夹的内容。 我决定创建自定义数据源控件,以便可以使用 GridView 控件来显示数据。

GridView 一样,该控件不仅可以以显示文件夹的内容,还可以用于重命名或者 delete 文件或者文件夹。 因此,这可以是创建你自己的文件管理器的一个很好的控制。

控件还可以用于创建几乎没有代码的图片库,如下所示:

代码在 VB.Net 中,但是在 C# 或者其他语言中运行它并不难。

许可证

控件是 LGPL许可协议下的免费和开放源码。

安装

正在安装控件

你可以按标准方式安装该控件:

  • 在网站的应用程序 root 中创建一个""文件夹( 如果它尚未存在)
  • 将程序集文件 foldercontentsdatasource.dll 复制到bin文件夹中

你可能希望将该控件添加到编辑器( 。Visual Studio 或者 C# 生成器)的工具箱中。 这将允许你通过拖动将控件添加到页中。 按照编辑器的过程向工具箱中添加控件。

使用控件

将控件添加到页面

有两种方法可以将控件添加到页面中:

  • 如果该控件已经安装在工具箱上,请先向页面添加数据控件,例如 GridViewDataList 或者 Repeater 。 接下来,使用数据源配置向导选择数据源。 确保在 bin文件夹中有 evenlogdatasource.dll 程序集的副本。

  • 手动添加代码。将该行添加到页面的顶部:
<%@RegisterTagPrefix="rw"Namespace="rw"Assembly="foldercontentsdatasourcecontrol"%>

然后,在页面中添加这样的标签:

<rw:FolderContentsDataSourceid="FolderContentsDataSource1"runat="server"></rw:FolderContentsDataSource>

最后,将数据控件( GridView 或者 DataList ) 添加到页中,并将它的连接到 FolderContentsDataSource

设置文件夹

控件将显示设置为 Parameter的文件夹的内容。 参数的NAME 为" Directory"。

<rw:FolderContentsDataSourceID="FolderContentsDataSource1"runat="server"><SelectParameters><asp:ParameterName="Directory"Type="String"DefaultValue="c:inetpubwwwroot"/></SelectParameters></rw:FolderContentsDataSource>

可以使用任何参数类型( 如 ControlParameter 或者 QueryStringParameter ) 将参数值连接到环境值。 在属性窗口中使用参数设置。 请注意,你只需要一个参数。 这里参数用于内容的选择,删除和重命名。

演示页面

该控件带有两个演示页面:

  • demo.aspx 显示选定文件夹中所有文件和子文件夹的List 。 此页使用 GridView 控件,以及用于选择文件夹的TextBox 控件。 通过 ControlParameter 设置 Directory 参数,将 TextBox 连接到数据源。
  • demogallery.aspx 显示一个包含给定文件夹中所有图片的库。 这里页面使用绑定到 FolderContentsDataSource 控件的DataList 控件。 使用 DataListRepeatColumns 属性控制行中的图片数。

重要:需要使用具有对文件夹的读权限的凭据运行这些页。 要删除或者重命名文件,你需要相应的权限。 用户可以使用模拟,或者确保该文件夹可以用于ASPNET帐户。

它的工作原理

我从Kothari的代码中得到了一些关于数据源控件的想法,在 www.nikhilk.net/DataSourceControlsSummary.aspx 。 我构建了两个主要类: FolderContentsDataSourceFolderContentsDataSourceView

读取文件夹内容的代码位于 FolderContentsDataSourceView 类的ExecuteSelect 方法中。 这里代码生成一个 DataTable,其中包含给定文件夹中的项的List:

ProtectedOverridesFunction ExecuteSelect(ByVal arguments _
 As System.Web.UI.DataSourceSelectArguments) _
 As System.Collections.IEnumerable
 Dim dt AsNew DataTable()
 dt.Columns.Add("Name", System.Type.GetType("System.String"))
 dt.Columns.Add("Size", System.Type.GetType("System.Int64"))
 dt.Columns.Add("Modified", System.Type.GetType("System.DateTime"))
 dt.Columns.Add("Created", System.Type.GetType("System.DateTime"))
 dt.Columns.Add("Accessed", System.Type.GetType("System.DateTime"))
 dt.Columns.Add("IsFolder", System.Type.GetType("System.Boolean"))
 Dim exc As Exception = NothingDim dv As DataView = NothingTryDim objFolderContents As DirectoryInfo = _
 New DirectoryInfo(_owner.GetSelectedDirectory())
 Dim objEntries() As FileSystemInfo = _
 objFolderContents.GetFileSystemInfos()
 Dim objEntry As FileSystemInfo
 ForEach objEntry In objEntries
 Dim dr As DataRow = dt.NewRow()
 dr("Name") = objEntry.Name
 If (objEntry.Attributes And FileAttributes.Directory) <> 0Then dr("Size") = 0 dr("IsFolder") = TrueElse dr("Size") = CType(objEntry, FileInfo).Length
 dr("IsFolder") = FalseEndIf dr("Modified") = objEntry.LastWriteTime
 dr("Created") = objEntry.CreationTime
 dr("Accessed") = objEntry.LastAccessTime
 dt.Rows.Add(dr)
 Next dv = New DataView(dt)
 dv.Sort = arguments.SortExpression
 Catch ex As Exception
 exc = ex
 EndTryDim statusEventArgs AsNew FolderContentsDataSourceStatusEventArgs(exc)
 OnSelected(statusEventArgs)
 If (exc IsNotNothingAndNot statusEventArgs.ExceptionHandled) ThenThrow exc
 EndIfReturn dvEndFunction

兴趣点

  • 数据源控件

的未来

以下是一些改进的想法:

  • 设计器支持

如果有人决定扩展这个控件,或者者有任何评论,Bug 报告,或者者问题,那么很好的听到。



文章标签:数据  控制  FOLD  数据源  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语