生成pdf并创建下载后绑定网格

时间:2014-12-02 10:56:59

标签: c# asp.net pdf itextsharp

我有一个带网格的页面,可以使用iTextSharp dll生成PDF文件。代码如下:

  var document = new Document();
                            bool download = true;
                            if (download == true)
                            {
                                PdfWriter.GetInstance(document, Response.OutputStream);
                                BindGrid();
                            }
                            string fileName = "PDF" + DateTime.Now.Ticks + ".pdf";
                            try
                            {

                                document.Open();
                                // adding contents to the pdf file....
                            }
                            catch (Exception ex)
                            {
                                lblMessage.Text = ex.ToString();
                            }
                            finally
                            {
                                document.Close();
                                BindGrid();
                            }
                            Response.ContentType = "application/pdf";
                            Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
                            Response.Flush();
                            Response.End();
                            BindGrid();
                        }

我需要在下载窗口弹出后绑定网格,或者在用户点击下载后并不重要,我只需要在用户生成pdf文件后绑定网格。我已经尝试在很多地方绑定网格,但是没有一个工作,网格只有在刷新页面后才会绑定:(。

有什么方法可以做到吗?

1 个答案:

答案 0 :(得分:0)

Response.End结束页面生命周期。

我建议你:

  1. 生成PDF文件并将其保存在服务器上
  2. 绑定网格
  3. 刷新生成的文件
  4. 这样的事情:

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
                BindGrid(); // Bind the grid here
    
            // After reloading the page you flush the file
            if (Session["FILE"] != null)
                FlushFile();
        }
    
        protected void gv_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            // Generate & Save PDF here
    
            Session["FILE"] = fullFilePath; // The full path of the file you saved.
    
            Response.Redirect(Request.RawUrl); // This reload the page
        }
    
        private void FlushFile()
        {
            string fullFilePath = Session["FILE"].ToString();
            Session["FILE"] = null; 
    
            // Flush file here
        }
    

    希望这有帮助。

    干杯