public virtual CrystalDecisions.CrystalReports.Engine.ReportDocument CreateReport()
        {
            rpt_productsAboutToFinish rpt = new rpt_productsAboutToFinish();

            rpt.Site = this.Site;
            return(rpt);
        }
        private void btnPrintList_Click(object sender, EventArgs e)
        {
            dbSchemaAsDataSet ds = new dbSchemaAsDataSet();                                                      // object of the database schema typical as the source of the report
            SqlDataAdapter    da = new SqlDataAdapter();                                                         // dataadapter used to fill the dataset

            stockStatusReports.rpt_productsAboutToFinish r = new stockStatusReports.rpt_productsAboutToFinish(); // object of the report
            Reports.frm_crRpt f = new Reports.frm_crRpt();                                                       // object of the report viewer form


            // to change the text report headline according to the formsate
            CrystalDecisions.CrystalReports.Engine.TextObject txtReportHeader;
            txtReportHeader = r.ReportDefinition.ReportObjects["txtHeadLine"] as TextObject;


            if (fState == formState.productsAboutToFinish)
            {
                DialogResult dr = MessageBox.Show("هل تريد ارفاق المنتجات المنتهية من المخزن ضمن التقرير ؟", "ارفاق المنتجات المنتهية ايضا", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

                if (dr == DialogResult.Yes)
                {
                    da = _reportsAndInfo.getLstProductsAboutToFinish(true);
                }
                else if (dr == DialogResult.No)                // did't use if..else bcz the user might press cancel
                {
                    da = _reportsAndInfo.getLstProductsAboutToFinish();
                }

                f.Text = "تقرير المنتجات التي قاربت علي الانتهاء من المخزن";                //change the form title
            }
            else if (fState == formState.outOfStockProducts)
            {
                da     = _reportsAndInfo.getLstOutOfStockProducts();
                f.Text = "تقرير بالمنتجات المنتهية من المخزن";
                txtReportHeader.Text = "تقرير بالمنتجات المنتهية من المخزن";
            }
            else if (fState == formState.inStockProducts)
            {
                da     = _reportsAndInfo.getLstInOfStockProducts();
                f.Text = "تقرير جرد المنتجات الموجودة بالمخزن";
                txtReportHeader.Text = "تقرير جرد المنتجات الموجودة في المخزن";
            }

            da.Fill(ds, "v_get_products_with_details");
            r.Refresh();
            r.SetDataSource(ds);
            f.crystalReportViewer1.ReportSource = r;
            f.Show();
        }