更改后,查询还会在水晶报表中显示相同的数据

时间:2017-02-01 05:26:50

标签: c# .net crystal-reports

我根据c#.net桌面应用程序中水晶报告中的查询显示数据。导致问题的是,当我更改查询时,查询正在发生变化,并且根据临时表中的查询也显示数据,但在水晶报表中它没有显示新数据,它显示的是查询之前的相同数据也改变了。

例如:我想打印1号钞票,以便时间好。但是当我想在那个时候打印2号钞票时,也只在水晶报告中显示1号钞票。所以,这就是我无法打印2号法案的原因。

这是按钮点击事件中的代码

private void btn_previewdocument_Click(object sender, EventArgs e)
    {
        try
        {
            string mtmptbl = "TmpRetailInvoicePrint";
            RetailInvoicePrint frm = new RetailInvoicePrint();
            Cursor = Cursors.WaitCursor;
            timer1.Enabled = true;

            ReportDocument cryRpt = new ReportDocument();
            SqlCommand MyCommand = new SqlCommand();
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(cn.ConnectionString);
            ConnectionInfo crConnectionInfo = new ConnectionInfo();
            TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();

            string qryPreviewDocument = " SELECT Client.clientname as ClientName, " + System.Environment.NewLine;
            qryPreviewDocument += " RetailInvoice.invoiceno as InvoiceNo, " + System.Environment.NewLine;
            qryPreviewDocument += " RetailInvoice.pono as PoNO, RetailInvoice.issuedate as IssueDate, RetailInvoice.duedate as DueDate, " + System.Environment.NewLine;
            qryPreviewDocument += " RetailInvoice.discount as Discount, RetailInvoice.shipping as Shipping, RetailInvoice.tax as Tax, RetailInvoice.vat as Vat, " + System.Environment.NewLine;
            qryPreviewDocument += " RetailInvoice.sese as Sese, RetailInvoice.paymenttype as PaymentType, RetailInvoice.chequeno as Chequeno, RetailInvoice.totalamt as TotalAmt, " + System.Environment.NewLine;
            qryPreviewDocument += " RetailInvoice.description as Description, RetailInvoice.paymentpaid as PaymentPaid, RetailInvoice.subtotal as Subtotal, " + System.Environment.NewLine;

            qryPreviewDocument += " RetailInvoicePayment.productid as ProductName, RetailInvoicePayment.uom as Uom, " + System.Environment.NewLine;
            qryPreviewDocument += " RetailInvoicePayment.quantity as Quantity, RetailInvoicePayment.price as Price" + System.Environment.NewLine;

            qryPreviewDocument += " into " + mtmptbl + " " + System.Environment.NewLine;

            qryPreviewDocument += " from tbl_retailinvoice RetailInvoice LEFT OUTER JOIN tbl_retailinvoicepayment RetailInvoicePayment " + System.Environment.NewLine;
            qryPreviewDocument += " ON RetailInvoice.invoiceno = RetailInvoicePayment.invoiceno " + System.Environment.NewLine;
            qryPreviewDocument += " LEFT OUTER JOIN tbl_clientdetail Client ON RetailInvoice.clientid = Client.clientid " + System.Environment.NewLine;

            qryPreviewDocument += " where RetailInvoice.BranchID = " + lbl_branchid.Text + " " + System.Environment.NewLine;
            qryPreviewDocument += " and RetailInvoice.YearID = " + lbl_yearid.Text + " " + System.Environment.NewLine;
            qryPreviewDocument += " and RetailInvoice.invoiceno = " + txt_invoice.Text + "";


            string SQL = "select upper(name) as TABLE_NAME FROM sysobjects WHERE type = 'U' and name = '" + mtmptbl + "' order by name";
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(SQL, cn);
            da.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                string qrydrop = "drop table " + mtmptbl + "";
                SqlCommand cmd = new SqlCommand(qrydrop, cn);
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
            }

            MyCommand = new SqlCommand(qryPreviewDocument, cn);
            MyCommand.CommandType = CommandType.Text;
            cn.Open();
            MyCommand.ExecuteNonQuery();
            cn.Close();

            string crReportPath = Application.StartupPath.Replace("bin\\Debug", "") + "\\Print";

            cryRpt.Load(crReportPath + "\\RptRetailInvoice.rpt");

            builder.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["con"];
            string dbName = builder.InitialCatalog;
            string dbDataSource = builder.DataSource;
            string userID = builder.UserID;
            string pass = builder.Password;

            crConnectionInfo.ServerName = dbDataSource;
            crConnectionInfo.DatabaseName = dbName;
            crConnectionInfo.UserID = userID;
            crConnectionInfo.Password = pass;

            Tables Crtables;
            Crtables = cryRpt.Database.Tables;

            foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in Crtables)
            {
                crtableLogoninfo = CrTable.LogOnInfo;
                crtableLogoninfo.ConnectionInfo = crConnectionInfo;
                CrTable.ApplyLogOnInfo(crtableLogoninfo);
            }

            frm.crystalReportViewer1.ReportSource = cryRpt;
            frm.crystalReportViewer1.RefreshReport();

            Cursor = Cursors.Arrow;
            frm.Show();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
}

所以,当任何人点击"预览文件"当时的按钮" btn_previewdocument_Click"事件发生。

我希望在此事件中根据想要在水晶报告中显示的查询数据来做到这一点。

谢谢你。

1 个答案:

答案 0 :(得分:0)

试试这个。在frm.crystalReportViewer1.ReportSource = cryRpt;添加cryRpt.Refresh();

之前