Visual WebGUI Report - 导出到PDF

      在Visual WebGUI处理Report的导出问题,跟在WebForm中的做法真不一样,还真头疼了一阵。但是在Visual WebGUI的论坛里找到了解决方法。一样是用 HttpResponse 来解决,但是Visual WebGUI中需要有它自己的方法才行,不然,最后导出只是在页面上显示的一大堆乱码而已。

       这是论坛中介绍解决方法的链接:Visual WebGUI Forum

       下面来段摘抄(位于上面的链接的最后一个Post)吧,Open-mouthed。这个例子用的Visual Studio自带的Report控件rdlc,大家将就着看吧。Tongue out

        The form which tries to open the pdf file must be a gizmox gateway control ("IGatewayControl") so it will handle the file writing response disconected from WebGUI's main response. In order to solve your problem, implement the Gizmox.WebGUI.Common.Interfaces.IGatewayControl interface as follow:


public class Form1 : Form, IGatewayControl
        public Form1()

        private void button1_Click(object sender, EventArgs e)
            Link.Open(new GatewayReference(this, "open"));

        #region IGatewayControl Members

        public IGatewayHandler GetGatewayHandler(IContext objContext, string strAction)
            LocalReport local = new LocalReport();
            local.ReportPath = Context.Server.MapPath("~/Report1.rdlc");

            DataSet1 dataSet = new DataSet1();
            DataSet1TableAdapters.Tabla1TableAdapter Adapter = new WebGUIApplication1.DataSet1TableAdapters.Tabla1TableAdapter();
            ReportDataSource dataSource = new ReportDataSource("DataSet1_Tabla1", dataSet.Tabla1);

            string reportType = "PDF";
            string mimeType = "application/pdf";
            string encoding;
            string fileNameExtension;

            //The DeviceInfo settings should be changed based on the reportType

            string deviceInfo =
            "<DeviceInfo>" +
            "  <OutputFormat>PDF</OutputFormat>" +
            "  <PageWidth>8.5in</PageWidth>" +
            "  <PageHeight>11in</PageHeight>" +
            "  <MarginTop>0.5in</MarginTop>" +
            "  <MarginLeft>1in</MarginLeft>" +
            "  <MarginRight>1in</MarginRight>" +
            "  <MarginBottom>0.5in</MarginBottom>" +

            Warning[] warnings;
            string[] streams;
            byte[] renderedBytes;

            //Render the report
            renderedBytes = local.Render(reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);

            //Clear the response stream and write the bytes to the outputstream
            //Set content-disposition to "attachment" so that user is prompted to take an action
            //on the file (open or save)

            HttpResponse objResponse = this.Context.HttpContext.Response;

            objResponse.ContentType = mimeType;
            objResponse.AddHeader("content-disposition", "attachment; filename=foo." + fileNameExtension);

            return null;

posted @ 2008-01-03 23:46 David Views(...) Comments(...) Edit 收藏
Freelance Jobs