2016-08-30 48 views
0

我是.net和C#的新手,我的asp水晶报表不会打印或导出。我读过,你必须使用会话来做到这一点。任何人都可以给我任何提示吗?我有一个基本的网页设置,可以让你看到我们的报告并输入一个参数。这工作正常。每当我尝试打印或导出我的页面开始做某事,然后停下来,我什么也得不到。有什么建议?这里是我的代码如何使用水晶报告在asp.net中的会话

protected void Page_Load(object sender, EventArgs e) 
{ 
    SqlConnection CN; 
    String MyConnectionString = null; 
    MyConnectionString = "data source=srv;initial catalog=db;user id=reports;password="; 
    CN = new SqlConnection(MyConnectionString); 
    CN.Open(); 
    string SQL = null; 
    SQL = "SELECT oeordhdr_sql.ord_no, oeordlin_sql.line_seq_no, oeordlin_sql.qty_to_ship, oeordlin_sql.cus_item_no, imitmidx_sql.upc_cd, imitmidx_sql.item_desc_1, oelincmt_sql.cmt, oeordhdr_sql.ship_to_name, oeordhdr_sql.ship_to_addr_1, oeordhdr_sql.ship_to_addr_2, oeordhdr_sql.ship_to_addr_3, oeordhdr_sql.ship_to_addr_4,sycdefil_sql.cd_type, sycdefil_sql.code_desc FROM(((oeordhdr_sql oeordhdr_sql INNER JOIN oeordlin_sql oeordlin_sql ON(oeordhdr_sql.ord_type = oeordlin_sql.ord_type) AND(oeordhdr_sql.ord_no = oeordlin_sql.ord_no)) LEFT OUTER JOIN oelincmt_sql oelincmt_sql ON oeordhdr_sql.ord_no = oelincmt_sql.ord_no) LEFT OUTER JOIN sycdefil_sql sycdefil_sql ON oeordhdr_sql.ship_via_cd = sycdefil_sql.sy_code) INNER JOIN imitmidx_sql imitmidx_sql ON oeordlin_sql.item_no = imitmidx_sql.item_no WHERE sycdefil_sql.cd_type = 'V' AND oeordhdr_sql.ord_no = ' {?Ord_no}' ORDER BY oeordhdr_sql.ord_no"; 

    SqlDataAdapter myDa = new SqlDataAdapter(SQL, CN); 
    CN.Close(); 
    DataSet DS = new DataSet(); 
    myDa.Fill(DS, "DataTable1"); 
    ReportDocument myRPT = new ReportDocument(); 
    myRPT.Load(Server.MapPath("~/CrystalReport.rpt")); 
    myRPT.SetDataSource(DS); 
    CrystalReportViewer1.ReportSource = myRPT; 
} 
+0

你需要在关于什么是更具体的继续发布您的代码。例如,您发布的代码是否执行并正确填充DataSet ..?也为了获得'DS'的基础数据表,你应该设置'myRPRT.SetDataSource(DS.Tables [0]);' – MethodMan

+0

代码有效,它根据输入的参数返回数据,但是当我按下打印按钮或导出,它什么都不做。 – Ryan

+0

检查这篇文章的线程和建议,这可能是一个JavaScript的问题,你正在经历http://forums.asp.net/t/992330.aspx?Crystal+Report+Viewer+Export+Print+buttons+are+not+working在+ VS + 2005 + – MethodMan

回答

0

事实证明一切,我需要做的是,如果增加一个(!Page.IsPostback)

protected void Page_Load(object sender, EventArgs e) 
{ 
if(!Page.IsPostBack) 
{ 
    SqlConnection CN; 
    String MyConnectionString = null; 
    MyConnectionString = "data source=srv;initial catalog=db;user id=reports;password="; 
    CN = new SqlConnection(MyConnectionString); 
    CN.Open(); 
    string SQL = null; 
    SQL = "SELECT oeordhdr_sql.ord_no, oeordlin_sql.line_seq_no, oeordlin_sql.qty_to_ship, oeordlin_sql.cus_item_no, imitmidx_sql.upc_cd, imitmidx_sql.item_desc_1, oelincmt_sql.cmt, oeordhdr_sql.ship_to_name, oeordhdr_sql.ship_to_addr_1, oeordhdr_sql.ship_to_addr_2, oeordhdr_sql.ship_to_addr_3, oeordhdr_sql.ship_to_addr_4,sycdefil_sql.cd_type, sycdefil_sql.code_desc FROM(((oeordhdr_sql oeordhdr_sql INNER JOIN oeordlin_sql oeordlin_sql ON(oeordhdr_sql.ord_type = oeordlin_sql.ord_type) AND(oeordhdr_sql.ord_no = oeordlin_sql.ord_no)) LEFT OUTER JOIN oelincmt_sql oelincmt_sql ON oeordhdr_sql.ord_no = oelincmt_sql.ord_no) LEFT OUTER JOIN sycdefil_sql sycdefil_sql ON oeordhdr_sql.ship_via_cd = sycdefil_sql.sy_code) INNER JOIN imitmidx_sql imitmidx_sql ON oeordlin_sql.item_no = imitmidx_sql.item_no WHERE sycdefil_sql.cd_type = 'V' AND oeordhdr_sql.ord_no = ' {?Ord_no}' ORDER BY oeordhdr_sql.ord_no"; 

    SqlDataAdapter myDa = new SqlDataAdapter(SQL, CN); 
    CN.Close(); 
    DataSet DS = new DataSet(); 
    myDa.Fill(DS, "DataTable1"); 
    ReportDocument myRPT = new ReportDocument(); 
    myRPT.Load(Server.MapPath("~/CrystalReport.rpt")); 
    myRPT.SetDataSource(DS); 
    CrystalReportViewer1.ReportSource = myRPT; 
} 
}