1. 程式人生 > >GridVIew中下載檔案的方法探討,方法(7)最佳。

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)就對了。