I want to show my pdf file in new tab when I click the button of gridview. How can I display? Please someone help me . This is my code.
'my gridview button click event
Protected Sub btnDisplay_Click(sender As Object, e As EventArgs)
Dim grdrow As GridViewRow = CType((CType(sender, Button)).NamingContainer, GridViewRow)
'I save pdf with datetime but showing file name without datetime on screen so I need to
'combine again when I need to open the file from upload folder
Dim dtime As DateTime = grdrow.Cells(2).Text
Dim fname As String = lblFileName.Text.Split(".").First "_"
dtime.ToString("yyyyMMddHHmmss") ".pdf"
Dim FilePath As String = Server.MapPath("~/uploads/" & fname)
Dim User As WebClient = New WebClient()
Dim FileBuffer As Byte() = User.DownloadData(FilePath)
If FileBuffer IsNot Nothing Then
Response.ContentType = "application/pdf"
Response.AddHeader("content-length", FileBuffer.Length.ToString())
Response.BinaryWrite(FileBuffer)
End If
End Sub
--Edit-- I added my html for gridview.
<asp:GridView style ="margin:10px" runat="server" ID="FileList" AllowPaging="True" PageSize="2" PagerSettings-Position="Top" PagerSettings-Mode="Numeric" AutoGenerateColumns="false" SelectedIndex="0">
<HeaderStyle BackColor="#3AC0F2" ForeColor="White"></HeaderStyle>
<Columns>
<asp:BoundField DataField="Num" HeaderText="#" ItemStyle-Width="20" HtmlEncode="false" ><ItemStyle Width="20px"></ItemStyle></asp:BoundField>
<asp:BoundField DataField="Process" HeaderText="Process" ItemStyle-Width="200" HtmlEncode="false"><ItemStyle Width="200px"></ItemStyle></asp:BoundField>
<asp:BoundField DataField="Datetime" HeaderText="Datetime" ItemStyle-Width="300" HtmlEncode="false"><ItemStyle Width="300px"></ItemStyle></asp:BoundField>
<asp:BoundField DataField="InCharge" HeaderText="InCharge" ItemStyle-Width="150" HtmlEncode="false"><ItemStyle Width="150px"></ItemStyle></asp:BoundField>
<asp:TemplateField ItemStyle-Width="80px" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Button ID="btnDisplay" runat="server" Text="Display" Visible='<%# If(Eval("Process").ToString() = "アップロード", True, False) %>' OnClick="btnDisplay_Click" Target="_blank" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
CodePudding user response:
First use hyperlink instead of Button and make target =_blank. Then on Page Load of new aspx write code for generating PDF.
HTML CODE
<asp:HyperLink ID="btnDisplay" runat="server" Text="Open PDF" Target ="_blank" NavigateUrl="~/WBP/GeneratePDF.aspx"></asp:HyperLink>
SERVER CODE
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim dtime As DateTime = DateTime.Now.ToString()
Dim fname As String = "pdffile_"
dtime.ToString("yyyyMMddHHmmss") ".pdf"
Dim FilePath As String = Server.MapPath("writereaddata/" & fname)
Dim User As WebClient = New WebClient()
HttpContext.Current.Response.ContentType = "application/pdf"
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache)
Dim sw As New StringWriter()
Dim hw As New HtmlTextWriter(sw)
Dim pdfDoc As New Document(PageSize.A4, 10, 10, 8, 2)
Dim htmlparser As New HTMLWorker(pdfDoc)
PdfWriter.GetInstance(pdfDoc, HttpContext.Current.Response.OutputStream)
Dim sr As New StringReader(sw.ToString())
pdfDoc.Open()
Dim pthd As Paragraph = New Paragraph("WELCOME TO PDF FILE", New Font(Font.TIMES_ROMAN, 11, Font.BOLD, Color.BLACK))
pdfDoc.Add(pthd)
htmlparser.Parse(sr)
pdfDoc.Close()
HttpContext.Current.Response.Write(pdfDoc)
HttpContext.Current.Response.End()
End Sub
CodePudding user response:
i think you are missing something, add Response.End() at the end of the if statement
If FileBuffer IsNot Nothing Then
Response.ContentType = "application/pdf"
Response.AddHeader("content-length", FileBuffer.Length.ToString())
Response.BinaryWrite(FileBuffer)
Response.End()
End If
if it doesnt work, there must be an issue on the Html