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=ITE-03;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();
rpt.SetDataSource(LoadDetailInfo(orderItem).Tables["orderItem"]);
this.crystalReportViewer1.ReportSource = rpt;
}
catch (Exception ex)
{
}
}
//資料來源
private DataSet LoadDetailInfo(List<receiveShipmentOrderItem> orderItem)
{
DataSet ds = CreateReportDataSet();
if (orderItem != null)
{
DataTable deliveryorderTable = ds.Tables["orderItem"];
foreach (receiveShipmentOrderItem item in orderItem)
{
DataRow dr = deliveryorderTable.NewRow();
dr["id"] = item.purchaseProduct.id;
dr["orderCode"] = item.purchaseProduct.orderCode;
dr["receiveShipmentQty"] = item.receiveShipmentQty.ToString();
dr["reimburseMark"] = (item.purchaseProduct.reimburseMark ? "是" : "否");
dr["image"] = item.purchaseProduct.image;//二進位類型
deliveryorderTable.Rows.Add(dr);
}
}
return ds;
}
private DataSet CreateReportDataSet()
{
DataSet ds = new DataSet();
DataTable deliveryorderTable = new DataTable("orderItem");
deliveryorderTable.Columns.Add(new DataColumn("Image",System.Type.GetType("System.Byte[]"))));
deliveryorderTable.Columns.Add(new DataColumn("orderCode"));
deliveryorderTable.Columns.Add(new DataColumn("receiveShipmentQty"));
deliveryorderTable.Columns.Add(new DataColumn("reimburseMark"));
ds.Tables.Add(deliveryorderTable);
return ds;
}
//設定頭參數
private ParameterFields LoadOrderInfo(receiveShipmentOrder orderview)
{
ParameterFields orderInfo = new ParameterFields();
if (orderview != null)
{
orderInfo.Add(GetParameterField("supplierName", orderview.supplier.name));
orderInfo.Add(GetParameterField("name", orderview.createUser.name));
string state="";
orderInfo.Add(GetParameterField("state", state));
orderInfo.Add(GetParameterField("receiveCode", orderview.code));
}
return orderInfo;
}
//設定參數欄位
private ParameterField GetParameterField(string name, string value)
{
ParameterField field = new ParameterField();
ParameterDiscreteValue fieldValue = new ParameterDiscreteValue();
field.ParameterFieldName = name;
fieldValue.Value = value;
field.CurrentValues.Add(fieldValue);
return field;
}
------------------------------------------------------------------主副報
表關聯顯示------------------------------------------------------------------
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
資料,,全