gridview实现下载 想在gridview中添加一个可以下载文档的列按钮,每一行的相应的下载地址是知道的。请问怎么完成呢。谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请参考create database FilesDBgouse FilesDBgocreate table Files( Id Int IDENTITY primary key, FileName NVarchar(50), UpFilePath Nvarchar(255), UpTime DateTime default getdate())<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileUploadDemo.aspx.cs" Inherits="FileUploadDemo._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 runat="server"> <title>无标题页</title></head><body> <form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上传" /> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="SqlDataSource1" OnRowCommand="GridView1_RowCommand"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CommandName="download" CommandArgument='<%#Eval("upFilePath") %>'>下载</asp:LinkButton> </ItemTemplate> </asp:TemplateField> <asp:CommandField ShowDeleteButton="True" /> <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" ReadOnly="True" SortExpression="Id" /> <asp:BoundField DataField="FileName" HeaderText="FileName" SortExpression="FileName" /> <asp:BoundField DataField="UpFilePath" HeaderText="UpFilePath" SortExpression="UpFilePath" /> <asp:BoundField DataField="UpTime" HeaderText="UpTime" SortExpression="UpTime" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=.\SQLExpress;Initial Catalog=FilesDB;Integrated Security=True" DeleteCommand="DELETE FROM [Files] WHERE [Id] = @Id" InsertCommand="INSERT INTO [Files] ([FileName], [UpFilePath], [UpTime]) VALUES (@FileName, @UpFilePath, @UpTime)" ProviderName="System.Data.SqlClient" SelectCommand="SELECT [Id], [FileName], [UpFilePath], [UpTime] FROM [Files]" UpdateCommand="UPDATE [Files] SET [FileName] = @FileName, [UpFilePath] = @UpFilePath, [UpTime] = @UpTime WHERE [Id] = @Id"> <DeleteParameters> <asp:Parameter Name="Id" Type="Int32" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="FileName" Type="String" /> <asp:Parameter Name="UpFilePath" Type="String" /> <asp:Parameter Name="UpTime" Type="DateTime" /> <asp:Parameter Name="Id" Type="Int32" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="FileName" Type="String" /> <asp:Parameter Name="UpFilePath" Type="String" /> <asp:Parameter Name="UpTime" Type="DateTime" /> </InsertParameters> </asp:SqlDataSource> </div> </form></body></html> protected void Button1_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { FileUpload1.SaveAs(MapPath(FileUpload1.FileName)); const string cnString = @"Server=.\SQLExpress;Integrated Security=True;database=FilesDB"; SqlConnection cn = new SqlConnection(cnString); SqlCommand cmd = new SqlCommand("insert into Files(FileName,upFilePath,UpTime) values(@fileName, @upFilePath, getdate())", cn); cmd.Parameters.AddWithValue("@fileName", FileUpload1.FileName); cmd.Parameters.AddWithValue("@upFilePath", MapPath(FileUpload1.FileName)); cn.Open(); cmd.ExecuteNonQuery(); cn.Close(); DataBind(); } } protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "download") { FileStream fileStream = new FileStream(e.CommandArgument.ToString(), FileMode.Open); long fileSize = fileStream.Length; Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=\"" + HttpUtility.UrlEncode(e.CommandArgument.ToString(), System.Text.Encoding.UTF8) + "\""); Response.AddHeader("Content-Length", fileSize.ToString()); byte[] fileBuffer = new byte[fileSize]; fileStream.Read(fileBuffer, 0, (int)fileSize); fileStream.Close(); Response.BinaryWrite(fileBuffer); Response.End(); } DataBind(); } 请参考大概的样子是这样<%@ Page Language="C#" MasterPageFile="~/DepartmentMainMasterPage.master" AutoEventWireup="true" CodeFile="DepartmentDownload.aspx.cs" Inherits="DepartmentDownload" Title="相关下载" StylesheetTheme="WinXP_Blue" %><asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <asp:HiddenField ID="HF_DepartmentId" runat="server" /> <asp:HiddenField ID="HF_BlockId" runat="server" /> <asp:GridView ID="dgFileList" SkinID ="GridView" runat="server" OnRowDataBound="dgFileList_RowDataBound"> <Columns> <asp:HyperLinkField HeaderText="文件名称" DataNavigateUrlFields="Name" DataNavigateUrlFormatString='' DataTextField="Name" SortExpression="Name" /> <asp:BoundField DataField="Length" HeaderText="文件大小(bytes)" SortExpression="Length" > <ItemStyle HorizontalAlign="Right" /> </asp:BoundField> <asp:BoundField DataField="LastWriteTime" HeaderText="创建时间" SortExpression="LastWriteTime" /> <asp:BoundField DataField="Extension" HeaderText="文件类型" SortExpression="Extension" /> </Columns> </asp:GridView></asp:Content>protected void Page_Load(object sender, EventArgs e) { string DepartmentId = Request.QueryString["DepartmentId"]; string BlockId = Request.QueryString["BlockId"]; dlDir = @"D:\WebDownloadFiles\Department\"; dlDir += DepartmentId + "\\"; dlDir += BlockId + "\\"; HF_BlockId.Value = BlockId; HF_DepartmentId.Value = DepartmentId; string strFileName = Request.QueryString["FileName"]; if (!string.IsNullOrEmpty(Request.QueryString["FileName"])) { string path = dlDir + strFileName; string ext = System.IO.Path.GetExtension(strFileName); switch (ext) { case ".doc": Response.ContentType = "application/doc"; string filename; filename = "attachment;filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(path), System.Text.Encoding.UTF8); Response.AppendHeader("Content-Disposition", filename); FileInfo _fileInfo = new FileInfo(path); Response.AppendHeader("Content-Length", _fileInfo.Length.ToString()); Response.TransmitFile(path); break; case ".xls": Response.ContentType = "application/xls"; filename = "attachment;filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(path), System.Text.Encoding.UTF8); Response.AppendHeader("Content-Disposition", filename); _fileInfo = new FileInfo(path); Response.AppendHeader("Content-Length", _fileInfo.Length.ToString()); Response.TransmitFile(path); break; default: Console.WriteLine("Default case"); break; } } else { } FolderManager fm = new FolderManager(dlDir); if (fm.FolderExists) { this.BindFileDataToGrid("Name"); } }public void BindFileDataToGrid(string strSortField) { string strPath = dlDir; DataTable filesTable = new DataTable(); filesTable.Columns.Add("Name", Type.GetType("System.String")); filesTable.Columns.Add("Length", Type.GetType("System.Int32")); filesTable.Columns.Add("LastWriteTime", Type.GetType("System.DateTime")); filesTable.Columns.Add("Extension", Type.GetType("System.String")); FolderManager fm = new FolderManager(dlDir); //拷贝相关文件 Array arrFileInfo = fm.FileList; //Array arrFileInfo = new DirectoryInfo(this.Server.MapPath(strPath)).GetFiles(); IEnumerator _ienum = arrFileInfo.GetEnumerator(); try { while (_ienum.MoveNext()) { FileInfo myFileInfo = (FileInfo)_ienum.Current; DataRow myDataRow = filesTable.NewRow(); myDataRow["Name"] = myFileInfo.Name; myDataRow["Length"] = myFileInfo.Length; myDataRow["LastWriteTime"] = myFileInfo.LastWriteTime; myDataRow["Extension"] = myFileInfo.Extension; filesTable.Rows.Add(myDataRow); } } finally { if (_ienum is IDisposable) { (_ienum as IDisposable).Dispose(); } } DataView myDataView = filesTable.DefaultView; myDataView.Sort = strSortField; this.dgFileList.DataSource = myDataView; this.dgFileList.DataBind(); } protected void dgFileList_RowDataBound(object sender, GridViewRowEventArgs e) { HyperLink hl; if (e.Row.RowType == DataControlRowType.DataRow) { hl = e.Row.Cells[0].Controls[0] as HyperLink; hl.NavigateUrl = GetHF() + "FileName=" + hl.Text; } } 获取网页信息 winform datagridview 数据保存 C# 怎么获取 EXecl 表格中有多少个工作薄 保存成功 弹出提示 确认后返回主界面 代码如何写 请教大家个问题 怎样按键盘触发事件 有没有 C# 支持的GRID控件 WPF中动态添加控件 请问Access数据库中如何拆分列 如何将int类型转换为string类型呀? C# WINDOWS服务 通过NET FRAMEWORK2.0连接WEB SERVICE访问数据库,需要依存哪些服务? 数据连接问题
go
use FilesDB
go
create table Files
(
Id Int IDENTITY primary key,
FileName NVarchar(50),
UpFilePath Nvarchar(255),
UpTime DateTime default getdate()
)<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileUploadDemo.aspx.cs" Inherits="FileUploadDemo._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 runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上传" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Id"
DataSourceID="SqlDataSource1" OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="download" CommandArgument='<%#Eval("upFilePath") %>'>下载</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" />
<asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" ReadOnly="True"
SortExpression="Id" />
<asp:BoundField DataField="FileName" HeaderText="FileName" SortExpression="FileName" />
<asp:BoundField DataField="UpFilePath" HeaderText="UpFilePath" SortExpression="UpFilePath" />
<asp:BoundField DataField="UpTime" HeaderText="UpTime" SortExpression="UpTime" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=.\SQLExpress;Initial Catalog=FilesDB;Integrated Security=True"
DeleteCommand="DELETE FROM [Files] WHERE [Id] = @Id" InsertCommand="INSERT INTO [Files] ([FileName], [UpFilePath], [UpTime]) VALUES (@FileName, @UpFilePath, @UpTime)"
ProviderName="System.Data.SqlClient" SelectCommand="SELECT [Id], [FileName], [UpFilePath], [UpTime] FROM [Files]"
UpdateCommand="UPDATE [Files] SET [FileName] = @FileName, [UpFilePath] = @UpFilePath, [UpTime] = @UpTime WHERE [Id] = @Id">
<DeleteParameters>
<asp:Parameter Name="Id" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="FileName" Type="String" />
<asp:Parameter Name="UpFilePath" Type="String" />
<asp:Parameter Name="UpTime" Type="DateTime" />
<asp:Parameter Name="Id" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="FileName" Type="String" />
<asp:Parameter Name="UpFilePath" Type="String" />
<asp:Parameter Name="UpTime" Type="DateTime" />
</InsertParameters>
</asp:SqlDataSource>
</div>
</form>
</body>
</html> protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
FileUpload1.SaveAs(MapPath(FileUpload1.FileName));
const string cnString = @"Server=.\SQLExpress;Integrated Security=True;database=FilesDB";
SqlConnection cn = new SqlConnection(cnString);
SqlCommand cmd = new SqlCommand("insert into Files(FileName,upFilePath,UpTime) values(@fileName, @upFilePath, getdate())", cn);
cmd.Parameters.AddWithValue("@fileName", FileUpload1.FileName);
cmd.Parameters.AddWithValue("@upFilePath", MapPath(FileUpload1.FileName));
cn.Open();
cmd.ExecuteNonQuery();
cn.Close(); DataBind();
}
} protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "download")
{
FileStream fileStream = new FileStream(e.CommandArgument.ToString(), FileMode.Open);
long fileSize = fileStream.Length;
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + HttpUtility.UrlEncode(e.CommandArgument.ToString(), System.Text.Encoding.UTF8) + "\"");
Response.AddHeader("Content-Length", fileSize.ToString());
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
fileStream.Close();
Response.BinaryWrite(fileBuffer);
Response.End();
}
DataBind();
}
<%@ Page Language="C#" MasterPageFile="~/DepartmentMainMasterPage.master" AutoEventWireup="true" CodeFile="DepartmentDownload.aspx.cs" Inherits="DepartmentDownload" Title="相关下载" StylesheetTheme="WinXP_Blue" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:HiddenField ID="HF_DepartmentId" runat="server" />
<asp:HiddenField ID="HF_BlockId" runat="server" />
<asp:GridView ID="dgFileList" SkinID ="GridView" runat="server" OnRowDataBound="dgFileList_RowDataBound">
<Columns>
<asp:HyperLinkField HeaderText="文件名称" DataNavigateUrlFields="Name" DataNavigateUrlFormatString='' DataTextField="Name" SortExpression="Name" />
<asp:BoundField DataField="Length" HeaderText="文件大小(bytes)" SortExpression="Length" >
<ItemStyle HorizontalAlign="Right" />
</asp:BoundField>
<asp:BoundField DataField="LastWriteTime" HeaderText="创建时间" SortExpression="LastWriteTime" />
<asp:BoundField DataField="Extension" HeaderText="文件类型" SortExpression="Extension" />
</Columns>
</asp:GridView>
</asp:Content>protected void Page_Load(object sender, EventArgs e)
{
string DepartmentId = Request.QueryString["DepartmentId"];
string BlockId = Request.QueryString["BlockId"];
dlDir = @"D:\WebDownloadFiles\Department\";
dlDir += DepartmentId + "\\";
dlDir += BlockId + "\\"; HF_BlockId.Value = BlockId;
HF_DepartmentId.Value = DepartmentId;
string strFileName = Request.QueryString["FileName"];
if (!string.IsNullOrEmpty(Request.QueryString["FileName"]))
{
string path = dlDir + strFileName;
string ext = System.IO.Path.GetExtension(strFileName); switch (ext)
{
case ".doc":
Response.ContentType = "application/doc";
string filename;
filename = "attachment;filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(path), System.Text.Encoding.UTF8);
Response.AppendHeader("Content-Disposition", filename);
FileInfo _fileInfo = new FileInfo(path);
Response.AppendHeader("Content-Length", _fileInfo.Length.ToString()); Response.TransmitFile(path); break;
case ".xls":
Response.ContentType = "application/xls";
filename = "attachment;filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(path), System.Text.Encoding.UTF8);
Response.AppendHeader("Content-Disposition", filename);
_fileInfo = new FileInfo(path);
Response.AppendHeader("Content-Length", _fileInfo.Length.ToString());
Response.TransmitFile(path);
break;
default:
Console.WriteLine("Default case");
break;
}
}
else
{ } FolderManager fm = new FolderManager(dlDir);
if (fm.FolderExists)
{
this.BindFileDataToGrid("Name");
}
}
public void BindFileDataToGrid(string strSortField)
{
string strPath = dlDir;
DataTable filesTable = new DataTable();
filesTable.Columns.Add("Name", Type.GetType("System.String"));
filesTable.Columns.Add("Length", Type.GetType("System.Int32"));
filesTable.Columns.Add("LastWriteTime", Type.GetType("System.DateTime"));
filesTable.Columns.Add("Extension", Type.GetType("System.String")); FolderManager fm = new FolderManager(dlDir);
//拷贝相关文件
Array arrFileInfo = fm.FileList;
//Array arrFileInfo = new DirectoryInfo(this.Server.MapPath(strPath)).GetFiles();
IEnumerator _ienum = arrFileInfo.GetEnumerator();
try
{ while (_ienum.MoveNext())
{
FileInfo myFileInfo = (FileInfo)_ienum.Current;
DataRow myDataRow = filesTable.NewRow();
myDataRow["Name"] = myFileInfo.Name;
myDataRow["Length"] = myFileInfo.Length;
myDataRow["LastWriteTime"] = myFileInfo.LastWriteTime;
myDataRow["Extension"] = myFileInfo.Extension;
filesTable.Rows.Add(myDataRow);
}
}
finally
{
if (_ienum is IDisposable)
{
(_ienum as IDisposable).Dispose();
}
}
DataView myDataView = filesTable.DefaultView;
myDataView.Sort = strSortField;
this.dgFileList.DataSource = myDataView;
this.dgFileList.DataBind();
} protected void dgFileList_RowDataBound(object sender, GridViewRowEventArgs e)
{
HyperLink hl;
if (e.Row.RowType == DataControlRowType.DataRow)
{
hl = e.Row.Cells[0].Controls[0] as HyperLink;
hl.NavigateUrl = GetHF() + "FileName=" + hl.Text;
}
}