基于特定文件名在ASP.NET GridView分类展示文件夹文件的实现求助
解决ASP.NET GridView按文件名分类展示文件的问题
看起来你已经有了初步的代码框架,我来帮你完善这个逻辑,实现按文件名关键词把不同格式的文件分到对应的GridView里。
实现思路
- 第一步:先获取指定目录下所有符合格式(doc、xls、ppt、pdf)的文件路径
- 第二步:遍历每个文件,提取文件名,判断是否包含目标关键词(比如
SOP_IT、SOP_FAT) - 第三步:为每个GridView准备独立的数据源(用
List(Of FileInfo)存储文件信息,方便后续绑定显示文件名、大小、时间等) - 第四步:将数据源分别绑定到对应的GridView
完整的Page_Load代码(VB.NET)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then ' 替换成你的文件存储目录路径,比如站点下的Uploads文件夹 Dim uploadDir As String = Server.MapPath("~/Uploads/") ' 定义需要过滤的目标文件格式 Dim targetExtensions As String() = {".doc", ".xls", ".ppt", ".pdf"} ' 创建对应关键词的文件列表,作为GridView数据源 Dim sopItFiles As New List(Of FileInfo) Dim sopFatFiles As New List(Of FileInfo) ' 如果还有其他分类关键词,继续添加对应的列表即可 ' 获取目录下所有文件 Dim dirInfo As New DirectoryInfo(uploadDir) Dim allFiles As FileInfo() = dirInfo.GetFiles() ' 遍历文件,按关键词分类 For Each file As FileInfo In allFiles ' 先判断文件格式是否符合要求 If targetExtensions.Contains(file.Extension.ToLower()) Then Dim fileName As String = file.Name.ToLower() ' 按文件名关键词分类(不区分大小写) If fileName.Contains("sop_it") Then sopItFiles.Add(file) ElseIf fileName.Contains("sop_fat") Then sopFatFiles.Add(file) End If ' 新增分类的话,继续加ElseIf分支 End If Next ' 绑定数据到各个GridView gvSOP_IT.DataSource = sopItFiles gvSOP_IT.DataBind() gvSOP_FAT.DataSource = sopFatFiles gvSOP_FAT.DataBind() End If End Sub
前台GridView示例代码
你需要在.aspx页面里定义对应的GridView,这里给你一个包含常用列的示例:
<%-- SOP_IT分类的GridView --%> <asp:GridView ID="gvSOP_IT" runat="server" AutoGenerateColumns="False" Width="100%" CssClass="table table-bordered"> <Columns> <asp:BoundField DataField="Name" HeaderText="文件名" /> <asp:BoundField DataField="Length" HeaderText="文件大小(字节)" /> <asp:BoundField DataField="LastWriteTime" HeaderText="更新时间" DataFormatString="{0:yyyy-MM-dd HH:mm}" /> <%-- 新增下载链接列 --%> <asp:TemplateField HeaderText="操作"> <ItemTemplate> <asp:HyperLink ID="hlDownload" runat="server" NavigateUrl='<%# "~/Uploads/" + Eval("Name") %>' Text="下载" Target="_blank" CssClass="btn btn-sm btn-primary"></asp:HyperLink> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <%-- SOP_FAT分类的GridView --%> <asp:GridView ID="gvSOP_FAT" runat="server" AutoGenerateColumns="False" Width="100%" CssClass="table table-bordered"> <Columns> <asp:BoundField DataField="Name" HeaderText="文件名" /> <asp:BoundField DataField="Length" HeaderText="文件大小(字节)" /> <asp:BoundField DataField="LastWriteTime" HeaderText="更新时间" DataFormatString="{0:yyyy-MM-dd HH:mm}" /> <asp:TemplateField HeaderText="操作"> <ItemTemplate> <asp:HyperLink ID="hlDownload" runat="server" NavigateUrl='<%# "~/Uploads/" + Eval("Name") %>' Text="下载" Target="_blank" CssClass="btn btn-sm btn-primary"></asp:HyperLink> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
注意事项
- 确保你的文件存储目录(比如
~/Uploads/)已经创建,并且ASP.NET应用程序拥有该目录的读写权限 - 代码里用了
ToLower()做不区分大小写的判断,如果需要严格匹配大小写,去掉这个转换即可 - 如果要新增更多分类,只需要添加对应的文件列表、判断分支,再新增一个GridView就行
- 文件大小如果想转换成KB/MB更友好的单位,可以在后台处理(比如写个转换方法)或者用前台绑定表达式处理
内容的提问来源于stack exchange,提问作者Joinnes
相关产品推荐
相关产品推荐

