crystalReportViewer+ReceiveCrystalReport.rpt+DataSet.xsd做報表

crystalReportViewer(報表查看器)+ReceiveCrystalReport.rpt(報表文件)+DataSet.xsd(數據集)

1.crystalReportViewer 的ReportSource屬性指定一個ReceiveCrystalReport.rpt文件
2.添加一個dataset.xsd文件,添加報表要顯示的字段信息(一定要與數據庫中一致)
3.打開ReceiveCrystalReport.rpt文件,在右邊窗口DatabaseFields右鍵(Database EXpert)

 


在左邊窗口打開ProjectData>ADO.NET Datasets 選擇一個DataSet,添加到右邊,點確定,
再將其字段拖入打開的報表文件中即可

        private void PrintReceiveOrder_Load(object sender, EventArgs e)
        {
            try
            {
                ReceiveCrystalReport rpt = new ReceiveCrystalReport();
                DataSet ds = new DataSet();
                string strConn = "Data Source=192.168.1.1;Initial Catalog=Test;User ID=sa;Password=123456";
                SqlConnection conn = new SqlConnection(strConn);
                SqlDataAdapter da = new SqlDataAdapter("Select id,pay_time,type,remark from  test", conn);
                da.Fill(ds, "test");
                rpt.SetDataSource(ds.Tables["test"]);
                this.crystalReportViewer1.ReportSource = rpt;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

 

1.固定條數,調整節高或是寫公式:
在detail節按右鍵,Format     section...    
選擇     New     Page     after,然後點擊右邊的公式按鈕,輸入:    
RecordNumber     mod         5=     0    
則會每五條記錄翻頁。

2.換行顯示
選中有一個字段 右鍵 Fromat Object  勾選 Can Grow 即可

 

3設置主副表報關聯顯示

選擇子報表
點右鍵   選擇   change   subreport   links
 選擇關聯字段即可


4.紙張橫打

右鍵->打印設計->


5.橫打,左右雙打(一頁打雙份)




把寬度設置爲頁面的一半即可,最好是比頁面的一半還要少點




------------------------------------------------------------------不預覽直接選擇打印機打印-----------------------------------------------------

                PrintDialog print = new PrintDialog();
                print.ShowDialog();//選擇打印機
                PrintUPSCrystalReport ups = new PrintUPSCrystalReport();//報表設計
                ups.SetParameterValue("Code", "PH20120327");//設置參數
                ups.SetParameterValue("Telephone", "123456792");
                ups.PrintOptions.PrinterName = print.PrinterSettings.PrinterName;//用選擇的打印機進行打印,不選擇則用默認打印機打印
                ups.PrintToPrinter(1, true, 1, 1);//關鍵這句,不用預覽,直接打印

                 ups.SetDataSource(dt);//設置數據源


---------------------------------------------------------------------------用對象做做報表數據-----------------------------------------

        public PrintReceiveOrder(receiveShipmentOrder orderInfo,List<receiveShipmentOrderItem> orderItem)
        {    
            InitializeComponent();
            BindReport(orderInfo, orderItem);          
        }
        //綁定報表
        private void BindReport(receiveShipmentOrder orderInfo, List<receiveShipmentOrderItem> orderItem)
        {

            ParameterFields parameterFields = LoadOrderInfo(orderInfo);
            try
            {
               this.crystalReportViewer1.ParameterFieldInfo = parameterFields;
                ReceiveCrystalReport rpt = new ReceiveCrystalReport();

          DataSet ds = new DataSet();
                ds.Tables.Add(getInoData());
                ds.Tables.Add(getItemsData());
                rpt.SetDataSource(ds);
                this.crystalReportViewer1.ReportSource = rpt;
            }
            catch (Exception ex)
            {

            }
  
        }

///報表頭參數,InStockOrderInfo---DataSet.xsd 中的表

   private ReportDs.InStockOrderInfoDataTable getInoData()
        {
            ReportDs.InStockOrderInfoDataTable infoData = new ReportDs.InStockOrderInfoDataTable();
            infoData.TableName = "InStockOrderInfo";
            ReportDs.InStockOrderInfoRow newRow = infoData.NewInStockOrderInfoRow();
            newRow.BoxQty = txtBoxQty.Text;
            newRow.Remark = txtRemark.Text;
            newRow.OrderBarCode =txtCode.text;
            newRow.DeliveryWay = txtDeliveryWay.Text;
            infoData.Rows.Add(newRow);
            return infoData;
        }

///報表詳細,InStockOrderItems---DataSet.xsd 中的表
        private ReportDs.InStockOrderItemsDataTable getItemsData()
        {
            ReportDs.InStockOrderItemsDataTable itemData = new ReportDs.InStockOrderItemsDataTable();
            itemData.TableName = "InStockOrderItems";
            foreach (DataRow dr in _dtSource.Rows)
            {
                ReportDs.InStockOrderItemsRow newRow = itemData.NewInStockOrderItemsRow();
                newRow.BoxNo = dr["No"].ToString();
                newRow.PackageCode = dr["PackageCode "].ToString();
                newRow.Size = dr["Size"].ToString();
                newRow.Info= dr["Info"].ToString();
                newRow.ProductSize = dr["ProductSize"].ToString();
                newRow.Qty = dr["Qty"].ToString();
                itemData.Rows.Add(newRow);
            }
            return itemData;
        } 

------------------------------------------------------------------主副報表關聯顯示------------------------------------------------------------------

    private void bindList(List<WaitDeliveryView> deliveryList)
        {
            OrderCrystalReport rpt = new OrderCrystalReport();
            rpt.SetDataSource(LoadDetailInfo(deliveryList).Tables["packageItem"]);
            rpt.Subreports["OrderDetailReport.rpt"].SetDataSource(LoadDetailInfo(deliveryList).Tables["ProductItem"]);
            this.crystalReportViewer1.ReportSource = rpt;
        }

        //數據源
        private DataSet LoadDetailInfo(List<WaitDeliveryView> deliveryList)
        {
            DataSet ds = CreateReportDataSet();
            if (deliveryList != null)
            {
                DataTable packageTable = ds.Tables["packageItem"];

                DataTable ProductTable = ds.Tables["ProductItem"];

                int total = 0;
                int i = 0;
                foreach (WaitDeliveryView item in deliveryList)
                {
                    DataRow dr = packageTable.NewRow();
                    dr["Id"] = item.Package.id;
                    dr["OrderCode"] = item.Package.code;
                    dr["CustomName"] = item.Package.order.buyer.fullName;
                    dr["DeliveryWay"] = item.Package.delivery.name;
                    dr["Total"] = total;
                    packageTable.Rows.Add(dr);

                    foreach (orderProduct items in item.Package.orderProducts)
                    {
                        DataRow drs = ProductTable.NewRow();
                        drs["Id"] =item.Package.id;
                        drs["No"] = i + 1;
                        //顯示商品編號 + (SKU)
                        drs["Item"] = items.code + " " + items.SKU;
                        drs["Qty"] = items.productQty;
                        total += items.productQty;
                        ProductTable.Rows.Add(drs);
                    }
                }
            }
            return ds;
        }

        private DataSet CreateReportDataSet()
        {
            DataSet ds = new DataSet();
            DataTable packageTable = new DataTable("packageItem");
            packageTable.Columns.Add(new DataColumn("Id"));
            packageTable.Columns.Add(new DataColumn("OrderCode"));
            packageTable.Columns.Add(new DataColumn("CustomName"));
            packageTable.Columns.Add(new DataColumn("DeliveryWay"));
            packageTable.Columns.Add(new DataColumn("Total"));
            ds.Tables.Add(packageTable);

            DataTable ProductTable = new DataTable("ProductItem");
            ProductTable.Columns.Add(new DataColumn("Id"));
            ProductTable.Columns.Add(new DataColumn("No"));
            ProductTable.Columns.Add(new DataColumn("Item"));
            ProductTable.Columns.Add(new DataColumn("Qty"));
            ds.Tables.Add(ProductTable);
            return ds;
        }


 


報表詳細相關設置


資料


資料2


資料,,全


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章