遍历文件夹后进行分页(包含子文件夹)

mryouhao 2016-11-22 02:53:16

遍历获取了某个目录下的所有本地文件夹及文件(包含了子文件夹),现在父文件夹分页没有问题,但是点击进入子文件夹后就出问题了(点击下一页或者上一页操作时返回的是父文件夹的分页内容),请指教?
代码如下:
前台代码:
<asp:HyperLink ID="lnkPrev" runat="server">上一页</asp:HyperLink> <span class="pager-current"><span>
<asp:Label ID="lblCurrentPage" runat="server" Text="Label"></asp:Label></span></span> <span>
<asp:Label ID="lblTotalPages" runat="server" Text="Label"></asp:Label></span><span>
<asp:HyperLink ID="lnkNext" runat="server">下一页</asp:HyperLink></span></div>

后台代码:
List<fileModel> fm = new List<fileModel>();
PagedDataSource pds = new PagedDataSource();

System.IO.DirectoryInfo dir;
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
dir = new System.IO.DirectoryInfo(Server.MapPath((@"~\uploadfiles\")));
LoadDir(dir.ToString(),false);
}
}

#region 遍历文件夹并读取文件夹名称和文件名称绑定到泛型集合
/// <summary>
/// 遍历文件夹并读取文件夹名称和文件名称绑定到泛型集合
/// </summary>
/// <param name="FullPath"></param>
private void LoadDir(string FullPath,bool ifFolder)
{
fm.Clear();
pds.DataSource = null;
  string [] MyFiles,MyDirs;
  MyFiles = Directory.GetFiles(FullPath); //得到该目录下所有文件
  MyDirs= Directory.GetDirectories(FullPath); //得到该目录下所有目录
//遍历添加文件到List中
for (int i = 0; i < MyFiles.Length; i++)
{
fileModel f = new fileModel();
string name=MyFiles[i].ToString();
f.Filename = name.Substring(name.LastIndexOf("\\") + 1); //截取文件名称
f.Filepath = MyFiles[i].ToString();
if (name.Substring(name.IndexOf(".")+1).ToLower() == "pdf") //判断文件后缀名是pdf还是excel
{
f.Imgtype = "img/pdf.png";
}
else
{
f.Imgtype = "img/excel.png";
}
fm.Add(f);

}

//遍历添加文件夹到List中
for (int i = 0; i < MyDirs.Length; i++)
{
fileModel f = new fileModel();
string name = MyDirs[i].ToString();
f.Filename = name.Substring(name.LastIndexOf("\\") + 1); ;
f.Filepath = MyDirs[i].ToString();
f.Imgtype = "img/folder.png";
fm.Add(f);

}
//设置分页控件

pds.DataSource = fm;
pds.PageSize = 3;
pds.AllowPaging = true;
int totalCount = pds.PageCount;
int currPage;
if (ifFolder) //判断是否是文件夹
{
currPage = 1;
}
else
{
if (Request.QueryString["Page"] != null)
{
currPage = Convert.ToInt32(Request.QueryString["Page"]);
}
else
{
currPage = 1;
}
}
pds.CurrentPageIndex = currPage - 1;
lblCurrentPage.Text = "当前页:[" + currPage.ToString() + "]";
lblTotalPages.Text = "总页数:[" + totalCount.ToString() + "]";
if (!pds.IsFirstPage)
lnkPrev.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(currPage - 1);
if (!pds.IsLastPage)
lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(currPage + 1) ;
//把PagedDataSource 对象赋给DataList控件
this.FileList.DataSource = pds;
this.FileList.DataBind();

}
#endregion


#region 判断点击Datalist的事件
/// <summary>
/// 判断点击DataList事件
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
protected void FileList_ItemCommand(object source, DataListCommandEventArgs e)
{
string FilePath = e.CommandArgument.ToString();
if (FilePath.IndexOf(".") > -1) //判断如果是文件
{
string url=convertUrl(FilePath);
if (url.Substring(url.IndexOf(".") + 1).ToLower() == "pdf") //判断文件后缀名是pdf还是excel
{
Response.Redirect("web/viewer.html?file=" + "../" + url);
}
else
{
Response.Redirect("PdfViewer.aspx?url=" + url);
}

}
else
{
dir = new System.IO.DirectoryInfo(Server.MapPath((@"~\"+FilePath+"\\")));
LoadDir(dir.ToString(),true);
}

}
#endregion

父文件夹:


子文件夹:

...全文
224 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
mryouhao 2016-11-22
  • 打赏
  • 举报
回复
已解决!换成aspnetpager控件,保存当前文件夹名称到session对象中,每次点击链接的时候重新读取设置datalist。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧