2010-07-27 6 views

답변

1

나는 얼마 전에 이런 짓을했습니다. 아래는 페이지의 page_load 이벤트에서 사용한 코드입니다. 그것은 VB에서이며 세계 최고의 코드가 아니지만 당신이 솔루션을 얻을 수 있습니다 ..

Dim jobid As Integer = Request("jobid") 
    Dim rv As New Microsoft.Reporting.WebForms.ReportViewer 
    Dim r As String = "apps/Reports/legal_document.rdlc" 
    Dim ds As New jobmanagerTableAdapters.JobInformationTableAdapter 
    Dim ds2 As New ordermanagementTableAdapters.RecoveryItemsInformationTableAdapter 
    Dim ds3 As New expensemanagerTableAdapters.tbl_expensesTableAdapter 
    Dim ds4 As New ordermanagementTableAdapters.tbl_orders_collection_itemsTableAdapter 
    Dim ds5 As New attachmentsmanagerTableAdapters.tbl_attachmentsTableAdapter 
    Dim ds6 As New notesmanagerTableAdapters.tbl_notesTableAdapter 
    Dim ds7 As New payments_managerTableAdapters.tbl_paymentsTableAdapter 


    Dim rptSource1 As New Microsoft.Reporting.WebForms.ReportDataSource 
    Dim rptSource2 As New Microsoft.Reporting.WebForms.ReportDataSource 
    Dim rptSource3 As New Microsoft.Reporting.WebForms.ReportDataSource 
    Dim rptSource4 As New Microsoft.Reporting.WebForms.ReportDataSource 
    Dim rptSource5 As New Microsoft.Reporting.WebForms.ReportDataSource 
    Dim rptSource6 As New Microsoft.Reporting.WebForms.ReportDataSource 
    Dim rptsource7 As New Microsoft.Reporting.WebForms.ReportDataSource 

    rptSource1.Name = "jobmanager_JobInformation" 
    rptSource1.Value = ds.GetJobInfobyJobID(jobid) 

    rptSource2.Name = "ordermanagement_RecoveryItemsInformation" 
    rptSource2.Value = ds2.GetRecoveryItemsbyJobIDOrderID(jobid, 0) 

    rptSource3.Name = "expensemanager_tbl_expenses" 
    rptSource3.Value = ds3.GetExpensesbyJobIDOrderID(jobid, 0) 

    rptSource4.Name = "ordermanagement_tbl_orders_collection_items" 
    rptSource4.Value = ds4.GetDataByJobIDOrderID(jobid, 0) 

    rptSource5.Name = "attachmentsmanager_tbl_attachments" 
    rptSource5.Value = ds5.GetAllAttachmentsbyJobID(jobid) 

    rptSource6.Name = "notesmanager_tbl_notes" 
    rptSource6.Value = ds6.GetAllNotesbyJobID(jobid) 

    rptsource7.Name = "payments_manager_tbl_payments" 
    rptsource7.Value = ds7.GetPaymentsbyJobID(jobid) 


    rv.LocalReport.DataSources.Clear() 

    rv.LocalReport.ReportPath = r.ToString 
    rv.LocalReport.DataSources.Add(rptSource1) 
    rv.LocalReport.DataSources.Add(rptSource2) 
    rv.LocalReport.DataSources.Add(rptSource3) 
    rv.LocalReport.DataSources.Add(rptSource4) 
    rv.LocalReport.DataSources.Add(rptSource5) 
    rv.LocalReport.DataSources.Add(rptSource6) 
    rv.LocalReport.DataSources.Add(rptsource7) 

    'Page.Controls.Add(rv) 

    Dim warnings As Warning() = Nothing 
    Dim streamids As String() = Nothing 
    Dim mimeType As String = Nothing 
    Dim encoding As String = Nothing 
    Dim extension As String = Nothing 
    Dim bytes As Byte() 



    'Get folder on web server from web.config 
    Dim FolderLocation As String 
    FolderLocation = Server.MapPath("reports") 


    'First delete existing file 
    Dim filepath As String = FolderLocation & "\legal.PDF" 
    File.Delete(filepath) 



    'Then create new pdf file 
    bytes = rv.LocalReport.Render("PDF", Nothing, mimeType, _ 
     encoding, extension, streamids, warnings) 


    Dim fs As New FileStream(FolderLocation & "\legal.PDF", FileMode.Create) 
    fs.Write(bytes, 0, bytes.Length) 
    fs.Close() 

    Response.Redirect("reports/legal.pdf") 
+1

파일 시스템에 대한 쓰기 액세스가 필요합니다. 바이트를 MemoryStream으로 읽어 들이고, 응답 스트림을 지우고, HTTP 헤더를 올바르게 설정하고, 파일을 클라이언트로 직접 스트리밍하는 것이 어떨까요? – tomfanning

+0

Yeppers, 그건 효과가 있습니다. 나는 그것이 옵션 이었음이 명백 할 바이트로 이미 읽혀 졌기 때문에 계산했다. – DevDave

관련 문제