简体   繁体   中英

How do I download the PDF file generated given the file path in a Gridview?

I want to write code to allow user to download a PDF by clicking the "Download" linkbutton in a Gridview when the filepath is given in the Gridview.

Here's my code :

aspx

<asp:GridView ID="Gridview1" runat="server" ShowHeaderWhenEmpty="true" 
                            EmptyDataText="No Records Found" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateSelectButton="true" Font-Size="Small" Width="95%" onselectedindexchanged="Gridview1_SelectedIndexChanged">
    <AlternatingRowStyle BackColor="White" />

    <Columns>
        <asp:BoundField HeaderText="ID" DataField="id" DataFormatString="BSc/{0}" />
        <asp:BoundField HeaderText="Company Name" DataField="ComName" />
        <asp:BoundField HeaderText="Country Incorperated" DataField="Country" />
        <asp:BoundField HeaderText="Date Created" DataField="Date" />
        <asp:BoundField HeaderText="Path" DataField="Path"  />

        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton ID="lnkDownload" Text = "Download" CommandArgument = '<%# Eval("Path") %>' runat="server" OnClick = "DownloadFile"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>

    <EditRowStyle BackColor="#2461BF" />
    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#EFF3FB" />
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
    <SortedAscendingCellStyle BackColor="#F5F7FB" />
    <SortedAscendingHeaderStyle BackColor="#6D95E1" />
    <SortedDescendingCellStyle BackColor="#E9EBEF" />
    <SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>

aspx.cs

protected void DownloadFile(object sender, EventArgs e)
{
    string filePath = (sender as LinkButton).CommandArgument;
    Response.ContentType = ContentType;
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
    Response.WriteFile(filePath);
    Response.End();
}

I looked up the download code from this site : http://www.aspsnippets.com/Articles/Download-Files-from-GridView-using-LinkButton-Click-Event-in-ASPNet-using-C-and-VBNet.aspx

I also get the file path like I'm supposed to, but thereafter nothing happens. There is no error either.

Please help. Thanks in advance.

Response.WriteFile is an old method that was used in ASP.NET 1.1. Try this code for download instead.

// Clear the content of the response
Response.ClearContent();

// Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));

// Add the file size into the response header
Response.AddHeader("Content-Length", filePath.Length.ToString());

// Set the ContentType
Response.ContentType = "application/pdf";

// Write the file into the response (TransmitFile is for ASP.NET 2.0 and above. In ASP.NET 1.1 you have to use WriteFile instead)
Response.TransmitFile(filePath);

Response.Flush();
// End the response
Response.End();

Also, having the grid within an update panel may cause problems when trying to download from a control within the grid itself, because download requires full post back. In this case, consider using PostBackTrigger .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM