GridVIew中下载文件的方法探讨,方法(7)最佳。

(1)使用Button下载

在GridView属性中添加:

OnRowCommand="GridView1_RowCommand"

在GridView的<Column>中添加:

<asp:ButtonField runat="server" Text="下载" HeaderText="下载" ButtonType="Button" CommandName="DownLoad_Click"
            HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"/>

在aspx.cs中添加:

protected void GridView1_RowCommand(Object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "DownLoad_Click")//
        {

              //下载文件代码,可参见上一篇博客文章。

        }

    }

注:该方法能够实现下载功能,但用户体验一般。另外,如果在下载代码的同时,将下载记录保存到数据库中的话,会插入两条相同的记录,为避免该问题,可以使用if判断,只进行一次数据库操作。

 

(2)使用Link下载

在GridView的<Column>中添加:

<asp:ButtonField ButtonType="Link" CommandName="DownLoad" DataTextField="文件名" HeaderText="文件名" "/>

另外需类同方法(1),添加OnRowCommand事件。

注:执行错误。通过string fnametype = Server.HtmlDecode(row.Cells[3].Text.ToString());获得的文件名为空。

 

(3)使用HyperLink下载

在GridView的<Column>中添加:

<asp:HyperLinkField DataNavigateUrlFields="文件名" Target="_blank" HeaderText="文件" Text="下载" />

注:因为DataNavigateUrlFields绑定的是字段,不是文件目录,所以文件需要放在同代码一致的目录下,否则找不到文件。在文件与代码混放的前提下,对于.jpg,.txt等类型的文件,点击后,会打开一个新的页面,然后显示文件内容,如图片或文本,而不是浏览器下载提示,但可以右键保存;对于.zip,.doc等类型文件,可以实现在新页面的下载功能。

 

(4)使用a标签的href下载之一

在GridView的<Column>中添加:

<asp:TemplateField HeaderText="文件名">
            <ItemTemplate> 
            <a href='javascript:void(0)' onclick="Hc();return false;"
            onmouseover="JavaScript:this.style.color='#FF0000'" onmouseout="JavaScript:this.style.color='#000000'"><%#Eval("文件名")%></a> 
            </ItemTemplate>

</asp:TemplateField>

在<head>中添加:

<script type="text/javascript">
    function Hc() {
        alert("000");

        //下载代码,【尚未实现从GridView中取文件名和文件ID等信息】
    }
</script>

注:此功能不知如何实现。因为我不知道如何实现取文件名,所以咱不能实现下载。

 

(5)使用a标签的href下载之二

在GridView的<Column>中添加:

<ItemTemplate>
            <a href='Resource\'+'<%#DataBinder.Eval(Container.DataItem,"文件名") %>' target="_blank"><%#Eval("文件名")%></a>
</ItemTemplate>

注:所有文件都是放在Resource文件夹下,点击后,会出现新页面显示“目录清单”,点击相应的文件后,对不同类型的文件,效果不一样,类同方法(3),也可以右键“目标另存为”。这种方法基本可以否定,安全性为0,不该显示文件的也显示了,用户操作十分不便。

 

(6)使用a标签的href下载之三

在GridView的<Column>中添加:

<ItemTemplate>
            <a href='Resource\<%#DataBinder.Eval(Container.DataItem,"文件名") %>' target="_blank"><%#Eval("文件名")%></a>
</ItemTemplate>

注:与方法(5)的区别是,删除了Resource\后面的  '+'  三个字符。点击后,会出现新页面,对不同类型文件的执行效果不同,类同方法(3)。与方法(3)的区别是,方法(3)的文件与代码混放,而方法(6)文件与代码是分离的。

 

(7)使用a标签的href下载之四

在GridView的<Column>中添加:

<ItemTemplate>
            <a href='Downloading.aspx?fid=<%#DataBinder.Eval(Container.DataItem,"文件ID")%>&fname=<%#DataBinder.Eval(Container.DataItem,"文件名")%>'
             target="_blank"><%#Eval("文件名") %></a>
</ItemTemplate>

在Downloading.aspx文件中添加:

protected void Page_Load(object sender, EventArgs e)
    {
        string strfid = Request.QueryString[0].ToString();
        string strfname = Request.QueryString[1].ToString();

        //下载文件代码

       //保存下载信息到数据库的SQL代码

    }

注:需要添加新的页面文件Downloading.aspx。href将对应的、下载必要的、SQL操作必要的信息传递到Downloading.aspx页面。点击后,出现Downloading.aspx,并弹出浏览器下载提示对话框,可以正常下载,也可关闭,关闭后,Downloading.aspx自动关闭。下载方式符合B/S习惯,与请用的网站下载方式一致。

 

总之,如果在GridView中下载文件的话,采用方法(7)就对了。

posted @ 2018-11-05 15:07  kevin860  阅读(434)  评论(0编辑  收藏  举报