Form

This example shows output from two queries, executed in application, to the report result file. There is one button to open the database, and another to create the report. The form also contains data access components to display customers and orders.

Data access components


Report template

The report template contains Scan-EndScan blocks, field names, If-Else-EndIf blocks.

Code to generate the report

private void btnMakeRtf_Click(object sender, EventArgs e)
{
//Make RTF button
//NwindDataSet
//NwindDataSetTableAdapters.Query1Adapter

OleDbCommand oleDbCmd = new System.Data.OleDb.OleDbCommand();
oleDbCmd.Connection = customersTableAdapter.Connection;

oleDbCmd.Connection.Open();

oleDbCmd.CommandText = "SELECT Customers.Address, "+
                       "Customers.City, "+
                       "Customers.Region, "+
                       "Customers.PostalCode, "+
                       "Customers.Country, "+
                       "Customers.CompanyName, " + 
                       "Orders.OrderID, " +
                       "Orders.CustomerID, " +
                       "Orders.EmployeeID, " +
                       "Orders.OrderDate, " +
                       "Orders.RequiredDate, " +
                       "Orders.ShippedDate, " + 
                       "Orders.ShipVia, " +
                       "Shippers.CompanyName AS Shp_CompanyName, " +
                       "Employees.LastName, " +
                       "Employees.FirstName, " +
                       "Orders.Freight, " +
                       "Orders.ShipName, " + 
                       "Orders.ShipAddress, " +
                       "Orders.ShipCity, " +
                       "Orders.ShipRegion, " +
                       "Orders.ShipPostalCode, " + 
                       "Orders.ShipCountry " +
                       "FROM(((Orders INNER JOIN " +
                       "Customers ON Orders.CustomerID = Customers.CustomerID) " + 
                       "INNER JOIN " +
                       "Shippers ON Orders.ShipVia = Shippers.ShipperID) " + 
                       "INNER JOIN " +
                       "Employees ON Orders.EmployeeID = Employees.EmployeeID) " +
                       "WHERE(Orders.OrderID = @OrderID) " +
                       "ORDER BY Orders.CustomerID, Orders.OrderID";

 oleDbCmd.Parameters.Clear();
 oleDbCmd.Parameters.Add("OrderID", OleDbType.Integer);
 Int32 OrderID;
 OrderID = (Int32)((DataRowView)BindingContext[dataGridView2.DataSource].Current)["OrderID"];
 oleDbCmd.Parameters["OrderID"].Value = OrderID;

 OleDbCommand oleDbCmd2 = new System.Data.OleDb.OleDbCommand();
 oleDbCmd2.Connection = customersTableAdapter.Connection;
 oleDbCmd2.CommandText =
 "SELECT Products.ProductName, " +
 "[Order Details].ProductID, " +
 "[Order Details].UnitPrice, " +
 "[Order Details].Quantity, " +
 "[Order Details].Discount, " +
 "ROUND([Order Details].UnitPrice*[Order Details].Quantity*((1 - [Order Details].Discount)/100)*100,2) AS ExtPrice " +
 "FROM([Order Details] INNER JOIN " +
 "Products ON [Order Details].ProductID = Products.ProductID) " +
 "WHERE[Order Details].OrderID = @OrderID " +
 "ORDER BY[Order Details].OrderID ";

 oleDbCmd2.Parameters.Clear();
 oleDbCmd2.Parameters.Add("OrderID", OleDbType.Integer);
 oleDbCmd2.Parameters["OrderID"].Value = OrderID;

 OleDbDataReader reader = oleDbCmd.ExecuteReader();
 reader.Read();

 OleDbDataReader reader2 = oleDbCmd2.ExecuteReader();
 reader2.Read();

 //------Run report -------------
 ekRtf1.ReportData.Clear();
 ekRtf1.ReportData.Add(reader, "Qr"); //Attach reader to the report with alias "Qr"
 ekRtf1.ReportData.Add(reader2, "Qr2"); //Attach reader2 to the report with alias "Qr2"

 ekRtf1.OutFile = "Order_" + OrderID.ToString() + ".doc";
 ekRtf1.ExecuteOpen();

 ekRtf1.ReportData.Clear();
 //-----End report ---------------

 reader2.Close();
 oleDbCmd2.Dispose();

 reader.Close();
 oleDbCmd.Connection.Close();
 oleDbCmd.Dispose();

 }


Result