http://www.cnblogs.com/wyforumid/archive/2008/05/14/1196155.html
首先对以上的原创者说对不起下,未经同意就改了他的源码,还把改后的源码发出来。
主要改的地方就是地址栏里的东东了,原文可以看以上的,我贴上自己改后的源码吧
Default.aspx文件
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Application Select</title>
<link id="SheetCss" type="text/css" href="Css/FileSelect.css" rel="Stylesheet"/>
<link id="ControlCss" type="text/css" href="Css/control.css" rel="Stylesheet"/>
<script type="text/javascript" language="javascript">
var selectType;
function ChangeDefaultCSS()
{
var divs = document.getElementsByName("listitem");
for(i=0;i<divs.length;i++)
{
divs[i].className = "divItem";
}
}
/**//*
单击文件或文件夹时,记录路径
*/
function GetSelectFilePath(div)
{
var hdfDir = document.getElementById("<%=hdfDir.ClientID %>");
var currentDir = document.getElementById("<%=currentDir.ClientID %>");
var fileInfos = div.getElementsByTagName("input");
//记录所选文件路径
hdfDir.value = fileInfos[0].value;
//记录所选择类型:文件||文件夹
selectType = fileInfos[1].value;
if(selectType == "dir")
{
currentDir.value = fileInfos[0].value;
}
}
/**//*
单击事件
*/
function Click(div)
{
//清除其他div选择样式
ChangeDefaultCSS();
//记录所选文件或文件夹的路径
GetSelectFilePath(div);
var span = div.getElementsByTagName("span");
var fileNames = document.getElementById("<%=tbxSelectedFiles.ClientID %>");
var fileType = div.getElementsByTagName("input");
if(selectType == "file")//(fileType[1].value == "dir")
{
fileNames.value = span[0].innerHTML;
}
else
{
fileNames.value = "";
}
div.className = "divSelectItem";
}
/**//*
双击事件
*/
function DClick(div)
{
var fileInfos = div.getElementsByTagName("input");
//file|dir type
if(fileInfos[1].value=="file")
{
__doPostBack('btnOpenFile','');
return false;
}
else
{
__doPostBack('btnOpenDir','');
return false;
}
}
/**//*
Open按钮客户端事件
*/
function OnOpenBefore()
{
if(selectType=="dir")
{
__doPostBack('btnOpenDir','');
return false;
}
else
{
return true;
}
}
/**//*
关闭模式窗口
*/
function CloseWindow()
{
window.close();
return false;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div class="divBorder">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div class="divInnerDivHeader">
<table>
<tr>
<td>
地址:</td>
<td>
<asp:DropDownList ID="ddlGotoDir" runat="server" Width="245px" AutoPostBack="True" OnSelectedIndexChanged="ddlGotoDir_SelectedIndexChanged">
</asp:DropDownList></td>
<td>
<asp:Button ID="btnUp" runat="server" Text="返回" CssClass="btn_2k3" OnClick="btnUp_Click" /></td>
</tr>
</table>
</div>
<div class="divInnerDivItemList">
<asp:DataList ID="FileList" runat="server" RepeatColumns="3" OnItemDataBound="FileList_ItemDataBound">
<ItemTemplate>
<div id="listitem" name="listitem" οndblclick="DClick(this)" οnclick="Click(this)" class="divItem">
<table>
<tr>
<td colspan="3">
<asp:Image ID="imgFileICO" runat="server"/></td>
<td > <span><%# DataBinder.Eval(Container.DataItem, "FileName") %></span></td>
</tr>
</table>
<asp:HiddenField ID="hdfFilePath" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "FilePath") %>'/>
<asp:HiddenField ID="hdfFileType" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "FileType") %>' />
</div>
</ItemTemplate>
</asp:DataList></div>
<div class="divInnerDivFooter">
<table>
<tr>
<td>
文件名:</td>
<td>
<asp:TextBox ID="tbxSelectedFiles" runat="server" Width="283px"></asp:TextBox></td>
<td>
<asp:Button ID="btnOpenFile" runat="server" Text="Open" CssClass="btn_2k3" OnClick="btnOpenFile_Click" OnClientClick="return OnOpenBefore()" /></td>
</tr>
<tr>
<td>
文件类型:</td>
<td>
<asp:DropDownList ID="ddlExtension" runat="server" Width="290px" OnSelectedIndexChanged="ddlExtension_SelectedIndexChanged" AutoPostBack="True">
<asp:ListItem Selected="True" Value=".*">所有文件</asp:ListItem>
<asp:ListItem Value=".rar">RAR文件(.rar)</asp:ListItem>
<asp:ListItem Value=".swf">SWF文件(.swf)</asp:ListItem>
</asp:DropDownList></td>
<td >
<asp:Button ID="btnCancel" runat="server" Text="Cancel" CssClass="btn_2k3" OnClientClick="return CloseWindow()" /></td>
</tr>
</table>
</div>
<asp:HiddenField ID="hdfDir" runat="server" />
<asp:HiddenField ID="currentDir" runat="server" />
<asp:HiddenField ID="hdRootDir" runat="server" />
<div style=" visibility :hidden">
<asp:Button ID="btnOpenDir" runat="server" OnClick="btnOpenDir_Click" Text="OpenDir" /></div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
Default.aspx.cs文件
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//设置初始路径
this.currentDir.Value = Server.MapPath("~/");
this.hdRootDir.Value = Server.MapPath("~/");
//绑定目录信息
BindFiles(Server.MapPath("~/"));
//绑定快捷选择
BindDirShortCut(this.hdRootDir.Value);
}
}
#region Functions
/** <summary>
/// 邦定快捷选择
/// </summary>
/// <param name="path"></param>
private void BindDirShortCut(string path)
{
this.ddlGotoDir.Items.Clear();
int tmplenght=path.Length - this.hdRootDir.Value.Length;
string[] subStr=null;
if (tmplenght > 0)
{
subStr = path.Substring(this.hdRootDir.Value.Length, tmplenght).Split(new string[] { "//" }, StringSplitOptions.None);
}
else
{
subStr=new string[1];
subStr[0] = "";
}
//获取文件夹信息
string[] directories = Directory.GetDirectories(this.hdRootDir.Value);
#region 添加默认项
ListItem item = new ListItem();
item.Text = "根目录";
item.Value = this.hdRootDir.Value;
this.ddlGotoDir.Items.Add(item);
#endregion
#region 添加文件夹项
int depth = 0;
foreach (string dir in directories)
{
string tmpName=Path.GetFileName(dir);
item = new ListItem();
item.Text += "-|-" + tmpName;
item.Value = dir;
this.ddlGotoDir.Items.Add(item);
if (tmpName == subStr[depth])
{
SubBindDir(depth + 1, subStr,dir);
}
}
#endregion
}
private void SubBindDir(int depth, string[] subStr,string path)
{
//获取文件夹信息
string[] directories = Directory.GetDirectories(path);
foreach (string dir in directories)
{
string tmpName=Path.GetFileName(dir);
if (depth < subStr.Length)
{
if (subStr[depth] == tmpName)
{
ListItem item = new ListItem();
item.Text = SubRendStr(depth) + tmpName;
item.Value = dir;
this.ddlGotoDir.Items.Add(item);
SubBindDir(depth + 1, subStr, dir);
}
}
}
}
private string SubRendStr(int depth)
{
string str = "";
for (int i = 0; i <= depth; i++)
{
str += "-|-";
}
return str;
}
/** <summary>
/// 查找指定文件夹中的文件夹和文件
/// </summary>
/// <param name="path"></param>
private void BindFiles(string path)
{
//所有文件名
string[] fileNames = Directory.GetFiles(path);
//所有文件夹名
string[] directories = Directory.GetDirectories(path);
#region 定义DataTable 保存文件信息
DataTable dt = new DataTable();
dt.Columns.Add("FileName", typeof(string));
dt.Columns.Add("FileType", typeof(string));
dt.Columns.Add("FilePath", typeof(string));
#endregion
#region 向DataTable添加文件信息
foreach (string file in fileNames)
{
//过滤指定后缀名的文件,当选择 All Files(.*) 时显示当前目录的所有文件
if (Path.GetExtension(file).ToLower() == ddlExtension.SelectedValue || ddlExtension.SelectedValue == ".*")
{
DataRow dr = dt.NewRow();
dr["FileName"] = Path.GetFileName(file);
dr["FileType"] = "file";
dr["FilePath"] = file;
dt.Rows.Add(dr);
}
}
#endregion
#region 向DataTable添加文件夹信息
foreach (string dir in directories)
{
DataRow dr = dt.NewRow();
dr["FileName"] = Path.GetFileName(dir);
dr["FileType"] = "dir";
dr["FilePath"] = dir;
dt.Rows.Add(dr);
}
#endregion
//绑定数据
DataView dv = dt.DefaultView;
dv.Sort = "FileType";
this.FileList.DataSource = dv;
this.FileList.DataBind();
}
#endregion
#region Control Events
/** <summary>
/// Up Button
/// 返回按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnUp_Click(object sender, EventArgs e)
{
//如果当前为根目录
if (this.currentDir.Value.EndsWith(this.hdRootDir.Value) || this.hdfDir.Value == string.Empty)
{
BindFiles(this.hdRootDir.Value);
this.tbxSelectedFiles.Text = string.Empty;
}
else//返回上一层目录
{
//上一层目录路径
string path = this.hdfDir.Value.Remove(hdfDir.Value.LastIndexOf('//'));
//设置返回后的目录路径
this.hdfDir.Value = path;
this.currentDir.Value = path;
//列出文件和文件夹
BindFiles(hdfDir.Value);
//清空文件
this.tbxSelectedFiles.Text = string.Empty;
}
}
/** <summary>
/// Open Button
/// 打开按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOpenFile_Click(object sender, EventArgs e)
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "click", "window.returnValue='" + this.hdfDir.Value.Replace('//','#') +"';window.close();", true);
}
/** <summary>
/// 双击打开文件夹
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOpenDir_Click(object sender, EventArgs e)
{
//清空选择的文件名
this.tbxSelectedFiles.Text = string.Empty;
//列出文件夹文件
BindFiles(this.hdfDir.Value);
BindDirShortCut(this.currentDir.Value);
this.ddlGotoDir.SelectedValue = this.currentDir.Value;
}
/** <summary>
/// 快捷选择变化时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ddlGotoDir_SelectedIndexChanged(object sender, EventArgs e)
{
//当前路径
string path = ddlGotoDir.SelectedValue;
//路径保存信息
this.hdfDir.Value = path;
this.currentDir.Value = path;
//列出文件夹文件
BindFiles(ddlGotoDir.SelectedValue);
BindDirShortCut(this.hdfDir.Value);
this.ddlGotoDir.SelectedValue=this.hdfDir.Value;
}
/** <summary>
/// DataList 邦定图片事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void FileList_ItemDataBound(object sender, DataListItemEventArgs e)
{
Image img = (Image)e.Item.FindControl("imgFileICO");
HiddenField hdf = (HiddenField)e.Item.FindControl("hdfFileType");
//类型为文件时的显示图片
if (hdf.Value == "file")
{
img.ImageUrl = "~/Images/unknow.JPG";
}
else //类型为文件夹时的显示图片
{
img.ImageUrl = "~/Images/folder.JPG";
}
}
#endregion
protected void ddlExtension_SelectedIndexChanged(object sender, EventArgs e)
{
BindFiles(this.currentDir.Value);
}
}
}
样式文件没改还是原创里的
control.css文件
.btn
{
width:60px;
BORDER-RIGHT: #7b9ebd 1px solid;
PADDING-RIGHT: 2px;
BORDER-TOP: #7b9ebd 1px solid;
PADDING-LEFT: 2px;
FONT-SIZE: 12px;
FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#ffffff, EndColorStr=#cecfde);
BORDER-LEFT: #7b9ebd 1px solid;
CURSOR: hand;
COLOR: black;
PADDING-TOP: 2px;
BORDER-BOTTOM: #7b9ebd 1px solid;
}
.btn1_mouseout
{
BORDER-RIGHT: #7EBF4F 1px solid;
PADDING-RIGHT: 2px;
BORDER-TOP: #7EBF4F 1px solid;
PADDING-LEFT: 2px;
FONT-SIZE: 12px;
FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#ffffff, EndColorStr=#B3D997);
BORDER-LEFT: #7EBF4F 1px solid;
CURSOR: hand;
COLOR: black;
PADDING-TOP: 2px;
BORDER-BOTTOM: #7EBF4F 1px solid
}
.btn1_mouseover
{
BORDER-RIGHT: #7EBF4F 1px solid;
PADDING-RIGHT: 2px;
BORDER-TOP: #7EBF4F 1px solid;
PADDING-LEFT: 2px;
FONT-SIZE: 12px;
FILTER:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
StartColorStr=#ffffff, EndColorStr=#CAE4B6); BORDER-LEFT: #7EBF4F
1px solid;
CURSOR: hand;
COLOR: black;
PADDING-TOP: 2px;
BORDER-BOTTOM: #7EBF4F 1px solid
}
.btn2
{
padding: 2 4 0 4;
font-size:12px;
height:23;
background-color:#ece9d8;
border-width:1;
}
.btn3_mouseout
{
BORDER-RIGHT: #2C59AA 1px solid;
PADDING-RIGHT: 2px;
BORDER-TOP:#2C59AA 1px solid;
PADDING-LEFT: 2px;
FONT-SIZE: 12px;
FILTER:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
StartColorStr=#ffffff, EndColorStr=#C3DAF5);
BORDER-LEFT: #2C59AA 1px solid;
CURSOR: hand;
COLOR: black;
PADDING-TOP: 2px;
BORDER-BOTTOM: #2C59AA 1px solid
}
.btn3_mouseover {
BORDER-RIGHT: #2C59AA 1px solid;
PADDING-RIGHT: 2px;
BORDER-TOP: #2C59AA 1px solid;
PADDING-LEFT: 2px;
FONT-SIZE: 12px;
FILTER:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
StartColorStr=#ffffff, EndColorStr=#D7E7FA);
BORDER-LEFT: #2C59AA 1px solid;
CURSOR: hand;
COLOR: black;
PADDING-TOP: 2px;
BORDER-BOTTOM: #2C59AA 1px solid
}
.btn3_mousedown
{
BORDER-RIGHT: #FFE400 1px solid;
PADDING-RIGHT: 2px;
BORDER-TOP: #FFE400 1px solid;
PADDING-LEFT: 2px;
FONT-SIZE: 12px;
FILTER:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
StartColorStr=#ffffff, EndColorStr=#C3DAF5);
BORDER-LEFT: #FFE400 1px solid;
CURSOR: hand;
COLOR: black;
PADDING-TOP: 2px;
BORDER-BOTTOM: #FFE400 1px solid
}
.btn3_mouseup
{
BORDER-RIGHT: #2C59AA 1px solid;
PADDING-RIGHT: 2px;
BORDER-TOP: #2C59AA 1px solid;
PADDING-LEFT: 2px;
FONT-SIZE: 12px;
FILTER:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
StartColorStr=#ffffff, EndColorStr=#C3DAF5);
BORDER-LEFT: #2C59AA 1px solid;
CURSOR: hand;
COLOR: black;
PADDING-TOP: 2px;
BORDER-BOTTOM: #2C59AA 1px solid
}
.btn_2k3
{
BORDER-RIGHT: #002D96 1px solid;
PADDING-RIGHT: 2px;
BORDER-TOP:#002D96 1px solid;
PADDING-LEFT: 2px;
FONT-SIZE: 12px;
FILTER:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
StartColorStr=#FFFFFF, EndColorStr=#9DBCEA);
BORDER-LEFT: #002D96 1px solid;
CURSOR: hand;
COLOR: black;
PADDING-TOP: 2px;
BORDER-BOTTOM: #002D96 1px solid;
width:60px;
}
.lbl
{
height: 18px;
border-right: #678fc2 1px solid;
border-top: #678fc2 1px solid;
border-left: #678fc2 1px solid;
border-bottom: #678fc2 1px solid;
}
.tbx
{
height: 16px;
border-right: #678fc2 1px solid;
border-top: #678fc2 1px solid;
border-left: #678fc2 1px solid;
border-bottom: #678fc2 1px solid;
}
.Richtbx
{
height: 200px;
border-right: #678fc2 1px solid;
border-top: #678fc2 1px solid;
border-left: #678fc2 1px solid;
border-bottom: #678fc2 1px solid;
font-family: Tahoma;
}
.tbxCheckCode
{
height: 16px;
border-left: medium none;
border-right: medium none;
border-top: medium none;
border-bottom-color: #678fc2;
border-bottom-style: solid;
border-bottom-width:1px;
}
.lnk
{
cursor: hand;
}
.GridViewStyle
{
font-size:12px;
font-family: Tahoma;
border: none 1px #fffff;
margin-top: 20px;
margin-left: 25px;
}
.gvheader
{
font-size: 14px;
font-family: Tahoma;
background-color: #006699;
font-weight: bold;
}
FileSelect.css文件里的
body
{
background-color: #dcdcdc;
font-size: 0.75em;
font-family: Tahoma;
}
.divItem
{
text-overflow: ellipsis;
white-space: nowrap;
}
.divBorder
{
background-color: #dcdcdc;
margin:10px;
width:510px;
height:320px;
}
.divInnerDivHeader
{
margin-left:10px;
}
.divInnerDivItemList
{
border:solid 1px;
margin-left: 5px;
background-color: #ffffff;
width:496px;
height:270px;
overflow:auto;
}
.divInnerDivFooter
{
margin-left:10px;
}
还有就是里面使用的两张图片了
一个是文件夹的
一个是文件的
记得图片放在Images文件夹下(自己创建 Css一样放在Css里)