将下载按钮放在gridview中

时间:2013-08-20 12:48:15

标签: c# html asp.net vb.net

我有一个名为tblfiles的表,其中包含列

id             int

Name           varchar(50)    
ContentType    varchar(50)    
Data           varbinary(MAX)

id是incremental,name是要上传的文件的名称,Content type告诉正在上传的文件的类型,例如“application / PDF”或“application / ms-word”等......数据是二进制数据存储的位置。

我已设法将数据上传到数据库中。

我添加了一个gridview来显示自动绑定的数据(你不知道手动哪个只是来自tblfiles的所有)我想要一个列,它将显示一个下载超链接或按钮来下载文件。

记住所有数据都存储在数据库而不是文件夹!!

那我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

尝试创建Grid事件OnRowDataBound方法,以创建从数据库引用该文件的链接。

您可以使用常规链接和文件的href,也可以为网格创建按钮。如果您创建按钮,还应该为网格RowCommand创建方法。

检查以下链接:

http://www.dotnetgallery.com/kb/resource17-RowDatabound-event-tips-and-tricks-in-Gridview-control.aspx

How to change in a Gridview on RowDataBound event the value of an Eval() field

答案 1 :(得分:0)

您可以拥有文件页面

例如:www.website.com/download.aspx?id = 12

然后,您需要更改http标头,说明它是一个要下载的文件,包含该文件的数据。

Response.AddHeader("Content-disposition", "attachment; filename=" & filename)
Response.ContentType = "application/PDF"
Response.BinaryWrite(binaryData)
Response.End()

另一个选项可能是创建一个临时文件。

答案 2 :(得分:0)

您需要添加一个执行方法的链接(具有超链接列或包含超链接的模板化列)。该链接应该执行一个方法,它沿着这些方向做某事:

  1. 在内存中加载相应的二进制数据
  2. 使用Response.BinayWrite将二进制流写入响应。
  3. 确保响应对象的contentType设置为“application / octet-stream”(查找正确的拼写,不确定) 确保响应对象具有以下标题:“Content-disposition”,“attachment:filename =