函数BindFileData(int nDirID)根据参数nDirID从数据库获取文件的属性,由于文件所在目录没有在数据库中直接保存,因此需要动态创建。该功能由函数CreateDir(int
nDirID)和函数InsertParentDir(DataTable dataTable,int nParentID,StringBuilder sDir)实现。创建文件所在目录的具体步骤如下:
(1)定义保存目录的字符串dirSB
(2)从数据库中获取所有目录,并使用DataTable对象dataTable保存获取的结果;
(3)获取当前文件的父目录的DirID,并根据此DirID值获取它的名称,并把该名称添加到字符串dirSB中;
(4)获取步骤(3)文件的父目录,并重复步骤(3),直到ParentID的值为-1.
其中,步骤(1)和步骤(2)由函数CreateDir(int nDirID)实现,步骤(3)和步骤(4)由函数InsertParentDir(DataTable dataTable,int nParentID,StringBuilder sDir)实现。
public string CreateDir(int nDirID)
{//创建字符串dirSB
StringBuilder dirSB=new StringBuilder();
//从数据库获取目录
IDisk disk=new Disk();
DataTable dataTable=SystemTools.ConvertDataReaderToDataTable(disk.GetAllDirectoryFile());
DataRow[] rowList=dataTable.Select("DirID='"+nDirID.ToString()+"'");
if(rowList.Lenth!=1) return("");
//创建其他目录
InsertParentDir(dataTable,Int32.Parse(rowList[0]["ParentID"].ToSring()),dirSB);
return (dirSB.ToString());
}
private void InsertParentDir(DataTable dataTable,int nParentID,StringBuilder sDir)
{
if(nParentID<=-1){return;}
DataRow[] rowList=dataTable.Select("DirID='"+nParentID.ToString()+"'");
if(rowList.Lenth!=1) return;
//插入目录信息
sDir.Insert(0,rowList[0]["Name"].ToString()+"/");
//递归调用,插入目录信息
InsertParentDir(dataTable,Int32.Parse(rowList[0]["ParentID"].ToSring()),sDir);
}
int nFileID=-1;
private int nParentID=-1;
protected void Page_Load(object sender,EventArgs e)
{
if(Request.Params["DirID"]!=null)
{
if(Int32.TryParse(Request.Params["DirID"].ToString(),out nDirID)==false){return;}
}
if(Request.Params["ParentID"]!=null)
{
if(Int32.TryParse(Request.Params["ParentID"].ToString(),out nParentID)==false){return;}
}
if(!Page.IsPostBack)
{//显示目录的名称
if(nFileID>-1){BindFileData(nFileID);}
}
}
private void BindFileData(int nDirID)
{
IDisk disk=new Disk();
SqlDataReader dr=disk.GetSingleFile(nFileID);
if(dr.Read())
{//获取文件的名称(包含后缀)
Name.Text=dr["Name"].ToString();
Type.Text=dr["Type"].ToString();
Contain.Text=dr["Contain"].ToString()+"B";
CreateDate.Text=dr["CreateDate"].ToString();
Dir.Text=CreateDir(Int32.Parse(dr["DirID"].ToString()));
}
dr.Close();
}
//返回
protected void ReturnBtn_Click(object sender,EventArgs e)
{Response.Redirect("~/ShowDisk.aspx?ParentID="+nParentID.ToString());}