Mini Kabibi Habibi
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Reflection;
using System.Text;
using DevExpress.Utils;
using DevExpress.Xpf.DemoBase;
namespace ReportWpfDemo {
public class DataSources {
static DataSet carsDB;
static DataSet countriesDB;
static DevExpress.Demos.DataSources.Fishes fishes;
public static DataSet CarsDB {
get {
if (carsDB == null) {
carsDB = new DataSet();
carsDB.ReadXml(GetDataStream("cars_db.xml"));
}
return carsDB;
}
}
public static DataSet CountriesDB {
get {
if (countriesDB == null) {
countriesDB = new DataSet();
countriesDB.ReadXml(GetDataStream("countries_db.xml"));
}
return countriesDB;
}
}
public static DataSet Nwind { get { return NWindData.DataSet; } }
public static DevExpress.Demos.DataSources.Fishes Fishes {
get {
if (fishes == null) {
Stream stream = AssemblyHelper.GetResourceStream(typeof(DataSources).Assembly, "Data/biolife.txt", true);
fishes = new DevExpress.Demos.DataSources.Fishes(stream);
}
return fishes;
}
}
static Stream GetDataStream(string fileName) {
return AssemblyHelper.GetEmbeddedResourceStream(typeof(DataSources).Assembly, fileName, true);
}
}
public class DataFiller : XtraReportsDemos.TableReport.ITableReportDataFiller, XtraReportsDemos.CustomDraw.ICustomControlReportDataFiller, XtraReportsDemos.DrillDownReport.IDrillDownReportDataFiller {
string GetValidColumnName(string columnName, DataTable table) {
if (string.IsNullOrEmpty(columnName))
return string.Empty;
if (table.Columns.Contains(columnName))
return columnName;
string[] words = columnName.Split('_');
if (words == null || words.Length == 0)
return string.Empty;
string name = DevExpress.XtraPrinting.StringUtils.Join(" ", words);
if (table.Columns.Contains(name))
return name;
return string.Empty;
}
void LINQToDataTable<T>(IEnumerable<T> query, DataTable table) {
if (query == null)
return;
PropertyInfo[] properties = null;
foreach (T item in query) {
if (properties == null)
properties = ((Type)item.GetType()).GetProperties();
DataRow row = table.NewRow();
foreach (PropertyInfo property in properties) {
string columnName = GetValidColumnName(property.Name, table);
System.Diagnostics.Debug.Assert(!string.IsNullOrEmpty(columnName));
row[columnName] = property.GetValue(item, null) == null ? DBNull.Value : property.GetValue(item, null);
}
table.Rows.Add(row);
}
}
void PopulateOddEvenDataTable(DataTable table) {
var productsQuery = DataSources.Nwind.Tables["Products"].AsEnumerable();
var categoriesQuery = DataSources.Nwind.Tables["Categories"].AsEnumerable();
var categories = from category in categoriesQuery
join products in productsQuery on category.Field<int>("CategoryID") equals products.Field<int>("CategoryID")
select new {
CategoryName = category.Field<string>("CategoryName"),
CategoryID = category.Field<int>("CategoryID"),
ProductName = products.Field<string>("ProductName"),
QuantityPerUnit = products.Field<string>("QuantityPerUnit"),
UnitPrice = products.Field<decimal>("UnitPrice")
};
LINQToDataTable(categories, table);
}
public void Fill(XtraReportsDemos.MasterDetailReport.Report report) {
var productsQuery = DataSources.Nwind.Tables["Products"].AsEnumerable();
var categoriesQuery = DataSources.Nwind.Tables["Categories"].AsEnumerable();
var products = from product in productsQuery
join category in categoriesQuery
on product.Field<int>("CategoryID") equals category.Field<int>("CategoryID")
select new {
CategoryName = category.Field<string>("CategoryName"),
CategoryID = product.Field<int>("CategoryID"),
Discontinued = product.Field<bool>("Discontinued"),
ProductID = product.Field<int>("ProductID"),
ProductName = product.Field<string>("ProductName"),
QuantityPerUnit = product.Field<string>("QuantityPerUnit"),
SupplierID = product.Field<int>("SupplierID"),
UnitPrice = product.Field<decimal>("UnitPrice"),
};
LINQToDataTable(products, report.dsMasterDetail1.Products);
report.dsMasterDetail1.Suppliers.Merge(DataSources.Nwind.Tables["Suppliers"]);
var orderDetailsQuery = DataSources.Nwind.Tables["Order Details"].AsEnumerable();
var orderDetails = from orderDetail in orderDetailsQuery
select new {
Discount = orderDetail.Field<float>("Discount"),
OrderID = orderDetail.Field<int>("OrderID"),
ProductID = orderDetail.Field<int>("ProductID"),
Quantity = orderDetail.Field<Int16>("Quantity"),
UnitPrice = orderDetail.Field<decimal>("UnitPrice"),
SubTotal = (decimal)(orderDetail.Field<Int16>("Quantity") * orderDetail.Field<decimal>("UnitPrice"))
};
LINQToDataTable(orderDetails, report.dsMasterDetail1.Order_Details);
}
public void Fill(XtraReportsDemos.Charts.Report report) {
report.dsCategoriesProducts1.Products.Merge(DataSources.Nwind.Tables["Products"]);
var categoriesQuery = DataSources.Nwind.Tables["Categories"].AsEnumerable();
var categories = from category in categoriesQuery
select new {
CategoryName = category.Field<string>("CategoryName"),
CategoryID = category.Field<int>("CategoryID"),
Description = category.Field<string>("Description"),
Picture = category.Field<byte[]>("Picture")
};
LINQToDataTable(categories, report.dsCategoriesProducts1.Categories);
}
public void Fill(XtraReportsDemos.ReportMerging.MergedReport report) {
report.FillDataFromDatabase = false;
Fill(report.ChartsReport);
var productsQuery = DataSources.Nwind.Tables["Products"].AsEnumerable();
var categoriesQuery = DataSources.Nwind.Tables["Categories"].AsEnumerable();
var products = from product in productsQuery
join category in categoriesQuery on product.Field<int>("CategoryID") equals category.Field<int>("CategoryID")
select new {
ProductID = product.Field<int>("ProductID"),
ProductName = product.Field<string>("ProductName"),
QuantityPerUnit = product.Field<string>("QuantityPerUnit"),
UnitPrice = product.Field<decimal>("UnitPrice"),
Description = category.Field<string>("Description"),
Picture = category.Field<byte[]>("Picture"),
CategoryName = category.Field<string>("CategoryName"),
CategoryID = product.Field<int>("CategoryID"),
};
LINQToDataTable(products, report.dsCatalog1.Products);
var orderDetailsQuery = DataSources.Nwind.Tables["Order Details"].AsEnumerable();
var orderDetails = from orderDetail in orderDetailsQuery
select new {
Discount = orderDetail.Field<float>("Discount"),
OrderID = orderDetail.Field<int>("OrderID"),
ProductID = orderDetail.Field<int>("ProductID"),
Quantity = orderDetail.Field<Int16>("Quantity"),
UnitPrice = orderDetail.Field<decimal>("UnitPrice"),
};
LINQToDataTable(orderDetails, report.dsCatalog1.Order_Details);
}
public void Fill(XtraReportsDemos.SideBySideReports.EmployeeComparisonReport report) {
var employeesQuery = DataSources.Nwind.Tables["Employees"].AsEnumerable();
var customersQuery = DataSources.Nwind.Tables["Customers"].AsEnumerable();
var productsQuery = DataSources.Nwind.Tables["Products"].AsEnumerable();
var ordersQuery = DataSources.Nwind.Tables["Orders"].AsEnumerable();
var orderDetailsQuery = DataSources.Nwind.Tables["Order Details"].AsEnumerable();
var employees = from employee in employeesQuery
select new {
EmployeeID = employee.Field<int>("EmployeeID"),
FullName = string.Concat(employee.Field<string>("FirstName"), ' ', employee.Field<string>("LastName")),
BirthDate = employee.Field<DateTime>("BirthDate"),
HireDate = employee.Field<DateTime>("HireDate"),
Photo = employee.Field<byte[]>("Photo")
};
var employeeOrders = from customer in customersQuery
join order in ordersQuery on customer.Field<string>("CustomerID") equals order.Field<string>("CustomerID")
join employee in employeesQuery on order.Field<int>("EmployeeID") equals employee.Field<int>("EmployeeID")
join orderDetail in orderDetailsQuery on order.Field<int>("OrderID") equals orderDetail.Field<int>("OrderID")
join product in productsQuery on orderDetail.Field<int>("ProductID") equals product.Field<int>("ProductID")
select new {
OrderID = order.Field<int>("OrderID"),
EmployeeID = employee.Field<int>("EmployeeID"),
ContactName = customer.Field<string>("ContactName"),
CompanyName = customer.Field<string>("CompanyName"),
ExtendedPrice = (decimal)((double)orderDetail.Field<decimal>("UnitPrice") * orderDetail.Field<short>("Quantity") * (1 - orderDetail.Field<float>("Discount") / 100.0))
};
LINQToDataTable(employees, ((XtraReportsDemos.SideBySideReports.EmployeeOrdersReport)report.xrSubreport1.ReportSource).dsEmployees1.Employees);
LINQToDataTable(employees, ((XtraReportsDemos.SideBySideReports.EmployeeOrdersReport)report.xrSubreport2.ReportSource).dsEmployees1.Employees);
LINQToDataTable(employeeOrders, ((XtraReportsDemos.SideBySideReports.EmployeeOrdersReport)report.xrSubreport1.ReportSource).dsEmployees1.EmployeeOrders);
LINQToDataTable(employeeOrders, ((XtraReportsDemos.SideBySideReports.EmployeeOrdersReport)report.xrSubreport2.ReportSource).dsEmployees1.EmployeeOrders);
}
public void Fill(XtraReportsDemos.PivotGrid.Report report) {
report.dsOrderReports1.OrderReports.Merge(DataSources.Nwind.Tables["OrderReports"]);
}
public void Fill(XtraReportsDemos.TableReport.Report report) {
var orderDetailsQuery = DataSources.Nwind.Tables["OrderDetails"].AsEnumerable();
var orderDetails = from orderDetail in orderDetailsQuery
where orderDetail.Field<int>("OrderID") == report.OrderID
select new {
Discount = orderDetail.Field<float>("Discount"),
OrderID = orderDetail.Field<int>("OrderID"),
ProductName = orderDetail.Field<string>("ProductName"),
Quantity = orderDetail.Field<Int16>("Quantity"),
Supplier = orderDetail.Field<string>("Supplier"),
UnitPrice = orderDetail.Field<decimal>("UnitPrice"),
SubTotal = (decimal)(orderDetail.Field<Int16>("Quantity") * orderDetail.Field<decimal>("UnitPrice"))
};
LINQToDataTable(orderDetails, report.dsOrderDetails1.OrderDetails);
}
public void Fill(XtraReportsDemos.Subreports.MasterReport report) {
var customersQuery = DataSources.CarsDB.Tables["Customers"].AsEnumerable();
var customers = from customer in customersQuery
select new {
ID = customer.Field<int>("ID"),
PersonName = customer.Field<string>("FirstName") + " " + customer.Field<string>("LastName"),
Occupation = customer.Field<string>("Occupation"),
Company = customer.Field<string>("Company")
};
LINQToDataTable(customers, report.dsCust1.Customers);
var ordersQuery = DataSources.CarsDB.Tables["Orders"].AsEnumerable();
var orders = from order in ordersQuery
select new {
CustomerID = order.Field<int>("CustomerID"),
ID = order.Field<int>("ID"),
PaymentAmount = order.Field<decimal>("PaymentAmount"),
PaymentType = order.Field<string>("PaymentType"),
PurchaseDate = order.Field<DateTime>("PurchaseDate"),
Time = order.Field<DateTime>("Time")
};
LINQToDataTable(orders, report.detailReport1.dsOrders1.Orders);
}
public void Fill(XtraReportsDemos.MultiColumnReport.Report report) {
report.dsCustomers1.Customers.Merge(DataSources.Nwind.Tables["Customers"]);
}
public void Fill(XtraReportsDemos.BarCodes.ProductLabelsReport report) {
report.dsProducts1.Products.Merge(DataSources.Nwind.Tables["Products"]);
}
public void Fill(XtraReportsDemos.NorthwindTraders.ProductListReport report) {
var productsQuery = DataSources.Nwind.Tables["Products"].AsEnumerable();
var categoriesQuery = DataSources.Nwind.Tables["Categories"].AsEnumerable();
var productsList = from category in categoriesQuery
join product in productsQuery on category.Field<int>("CategoryID") equals product.Field<int>("CategoryID")
select new {
ProductName = product.Field<string>("ProductName"),
QuantityPerUnit = product.Field<string>("QuantityPerUnit"),
UnitsInStock = product.Field<Int16>("UnitsInStock"),
CategoryName = category.Field<string>("CategoryName"),
CategoryID = category.Field<int>("CategoryID"),
ProductID = product.Field<int>("ProductID"),
};
LINQToDataTable(productsList, report.dsProductList1.Products);
}
public void Fill(XtraReportsDemos.NorthwindTraders.CatalogReport report) {
report.FillDataFromDatabase = false;
var productsQuery = DataSources.Nwind.Tables["Products"].AsEnumerable();
var categoriesQuery = DataSources.Nwind.Tables["Categories"].AsEnumerable();
var products = from product in productsQuery
join category in categoriesQuery on product.Field<int>("CategoryID") equals category.Field<int>("CategoryID")
select new {
ProductID = product.Field<int>("ProductID"),
ProductName = product.Field<string>("ProductName"),
QuantityPerUnit = product.Field<string>("QuantityPerUnit"),
UnitPrice = product.Field<decimal>("UnitPrice"),
Description = category.Field<string>("Description"),
Picture = category.Field<byte[]>("Picture"),
CategoryName = category.Field<string>("CategoryName"),
CategoryID = product.Field<int>("CategoryID"),
};
LINQToDataTable(products, report.dsCatalog1.Products);
var orderDetailsQuery = DataSources.Nwind.Tables["Order Details"].AsEnumerable();
var orderDetails = from orderDetail in orderDetailsQuery
select new {
Discount = orderDetail.Field<float>("Discount"),
OrderID = orderDetail.Field<int>("OrderID"),
ProductID = orderDetail.Field<int>("ProductID"),
Quantity = orderDetail.Field<Int16>("Quantity"),
UnitPrice = orderDetail.Field<decimal>("UnitPrice"),
};
LINQToDataTable(orderDetails, report.dsCatalog1.Order_Details);
}
public void Fill(XtraReportsDemos.NorthwindTraders.InvoiceReport report) {
var invoicesQuery = DataSources.Nwind.Tables["Invoices"].AsEnumerable();
var invoices = from invoice in invoicesQuery
where invoice.Field<int>("OrderID") < 10261
select new {
Address = invoice.Field<string>("Address"),
City = invoice.Field<string>("City"),
Country = invoice.Field<string>("Country"),
CustomerID = invoice.Field<string>("CustomerID"),
CustomersCompanyName = invoice.Field<string>("Customers.CompanyName"),
Discount = invoice.Field<float>("Discount"),
ExtendedPrice = invoice.Field<decimal>("ExtendedPrice"),
Freight = invoice.Field<decimal>("Freight"),
OrderDate = invoice.Field<DateTime>("OrderDate"),
OrderID = invoice.Field<int>("OrderID"),
PostalCode = invoice.Field<string>("PostalCode"),
ProductID = invoice.Field<int>("ProductID"),
ProductName = invoice.Field<string>("ProductName"),
Quantity = invoice.Field<Int16>("Quantity"),
Region = invoice.Field<string>("Region"),
RequiredDate = invoice.Field<DateTime>("RequiredDate"),
Salesperson = invoice.Field<string>("Salesperson"),
ShipAddress = invoice.Field<string>("ShipAddress"),
ShipCity = invoice.Field<string>("ShipCity"),
ShipCountry = invoice.Field<string>("ShipCountry"),
ShipName = invoice.Field<string>("ShipName"),
ShippedDate = invoice.Field<DateTime>("ShippedDate"),
ShippersCompanyName = invoice.Field<string>("Shippers.CompanyName"),
ShipPostalCode = invoice.Field<string>("ShipPostalCode"),
ShipRegion = invoice.Field<string>("ShipRegion"),
UnitPrice = invoice.Field<decimal>("UnitPrice")
};
LINQToDataTable(invoices, report.dsInvoice1.Invoices);
}
public void Fill(XtraReportsDemos.ShrinkGrow.Report report) {
report.dsEmployees1.Merge(DataSources.Nwind.Tables["Employees"]);
}
public void Fill(XtraReportsDemos.AnchorVertical.Report report) {
var carsQuery = DataSources.CarsDB.Tables["Cars"].AsEnumerable();
var cars = from car in carsQuery
where car.Field<string>("RtfContent") != null
select car;
report.dsCars1.Cars.Merge(cars.CopyToDataTable());
}
public void Fill(XtraReportsDemos.IListDatasource.Report report) {
report.DataSource = DataSources.Fishes;
}
public void Fill(XtraReportsDemos.CalculatedFieldsReport.Report report) {
report.dsOrderReports1.OrderReports.Merge(DataSources.Nwind.Tables["OrderReports"]);
}
public void Fill(XtraReportsDemos.MailMerge.Report report) {
var employeesQuery = DataSources.Nwind.Tables["Employees"].AsEnumerable();
var employees = from e1 in employeesQuery
join e2 in employeesQuery on e1.Field<Nullable<int>>("ReportsTo") equals e2.Field<int>("EmployeeID") into temp
from e in temp.DefaultIfEmpty()
select new {
Address = e1.Field<string>("Address"),
BirthDate = e1.Field<DateTime>("BirthDate"),
City = e1.Field<string>("City"),
Country = e1.Field<string>("Country"),
EmployeeID = e1.Field<int>("EmployeeID"),
Extension = e1.Field<string>("Extension"),
FirstName = e1.Field<string>("FirstName"),
HireDate = e1.Field<DateTime>("HireDate"),
HomePhone = e1.Field<string>("HomePhone"),
LastName = e1.Field<string>("LastName"),
Notes = e1.Field<string>("Notes"),
Photo = e1.Field<byte[]>("Photo"),
PostalCode = e1.Field<string>("PostalCode"),
Region = e1.Field<string>("Region"),
ReportsTo = e1.Field<Nullable<int>>("ReportsTo"),
Title = e1.Field<string>("Title"),
TitleOfCourtesy = e1.Field<string>("TitleOfCourtesy"),
ReportsToInfo = e == null ? string.Empty : e.Field<string>("FirstName") + " " + e.Field<string>("LastName")
};
LINQToDataTable(employees, report.dsEmployees1.Employees);
}
public void Fill(XtraReportsDemos.FormattingRules.Report report) {
var orderDetailsQuery = DataSources.Nwind.Tables["Order Details"].AsEnumerable();
var productsQuery = DataSources.Nwind.Tables["Products"].AsEnumerable();
var ordersQuery = DataSources.Nwind.Tables["Orders"].AsEnumerable();
var orders = from product in productsQuery
join orderDetail in orderDetailsQuery on product.Field<int>("ProductID") equals orderDetail.Field<int>("ProductID")
join order in ordersQuery on orderDetail.Field<int>("OrderID") equals order.Field<int>("OrderID")
select new {
OrderID = orderDetail.Field<int>("OrderID"),
ProductID = orderDetail.Field<int>("ProductID"),
ProductName = product.Field<string>("ProductName"),
UnitPrice = orderDetail.Field<decimal>("UnitPrice"),
Quantity = orderDetail.Field<Int16>("Quantity"),
Discount = orderDetail.Field<float>("Discount"),
Extended_Price = (decimal)((double)orderDetail.Field<decimal>("UnitPrice") * orderDetail.Field<Int16>("Quantity") *
(1 - orderDetail.Field<float>("Discount") / 100.0)),
OrderDate = order.Field<DateTime>("OrderDate")
};
LINQToDataTable(orders, report.formattingRulesDataSet1.Orders);
}
public void Fill(XtraReportsDemos.CrossBandControls.Report report) {
PopulateOddEvenDataTable(report.dsOddEvenStyles1.Products);
}
public void Fill(XtraReportsDemos.OddEvenStyles.Report report) {
PopulateOddEvenDataTable(report.dsOddEvenStyles1.Products);
}
public void Fill(XtraReportsDemos.RichText.Report report) {
var carsQuery = DataSources.CarsDB.Tables["Cars"].AsEnumerable();
var cars = from car in carsQuery
where !string.IsNullOrEmpty(car.Field<string>("RtfContent"))
select new {
Category = car.Field<string>("Category"),
Cyl = car.Field<byte>("Cyl"),
Description = car.Field<string>("Description"),
HP = car.Field<short>("HP"),
Hyperlink = car.Field<string>("Hyperlink"),
ID = car.Field<int>("ID"),
Liter = car.Field<double>("Liter"),
Model = car.Field<string>("Model"),
MPG_City = car.Field<byte>("MPG_City"),
MPG_Highway = car.Field<byte>("MPG_Highway"),
Picture = car.Field<byte[]>("Picture"),
Price = car.Field<decimal>("Price"),
RtfContent = car.Field<string>("RtfContent"),
Trademark = car.Field<string>("Trademark"),
TransmissAutomatic = car.Field<string>("TransmissAutomatic"),
TransmissSpeedCount = car.Field<byte>("TransmissSpeedCount")
};
LINQToDataTable(cars, report.dsCars1.Cars);
}
public void Fill(XtraReportsDemos.CustomDraw.Report report) {
var aboutRegionsQuery = DataSources.CountriesDB.Tables["AboutRegions"].AsEnumerable();
var aboutRegions = from aboutRegion in aboutRegionsQuery
where aboutRegion.Field<int>("Id") == report.RegionID
select new {
Country = aboutRegion.Field<string>("Country"),
Id = aboutRegion.Field<int>("Id"),
Region = aboutRegion.Field<string>("Region"),
PopulationPortion = aboutRegion.Field<double>("PopulationPortion"),
};
LINQToDataTable(aboutRegions, report.dsAboutCountries.AboutRegions);
}
void XtraReportsDemos.DrillDownReport.IDrillDownReportDataFiller.Fill(XtraReportsDemos.DrillDownReport.DrillDownReport report) {
var productsQuery = DataSources.Nwind.Tables["Products"].AsEnumerable();
var categoriesQuery = DataSources.Nwind.Tables["Categories"].AsEnumerable();
var categories = from category in categoriesQuery
select new {
CategoryName = category.Field<string>("CategoryName"),
CategoryID = category.Field<int>("CategoryID"),
Description = category.Field<string>("Description"),
Picture = category.Field<byte[]>("Picture")
};
var products = from category in categoriesQuery
join product in productsQuery on category.Field<int>("CategoryID") equals product.Field<int>("CategoryID")
select new {
CategoryID = category.Field<int>("CategoryID"),
ProductName = product.Field<string>("ProductName"),
QuantityPerUnit = product.Field<string>("QuantityPerUnit"),
UnitPrice = product.Field<decimal>("UnitPrice")
};
LINQToDataTable(categories, report.dsCategoriesProducts1.Categories);
LINQToDataTable(products, report.dsCategoriesProducts1.Products);
}
#region ITableReportDataFiller Members
void XtraReportsDemos.TableReport.ITableReportDataFiller.Fill(XtraReportsDemos.TableReport.Report report) {
Fill(report);
}
#endregion
#region ICustomControlReportDataFiller Members
void XtraReportsDemos.CustomDraw.ICustomControlReportDataFiller.Fill(XtraReportsDemos.CustomDraw.Report report) {
Fill(report);
}
#endregion
}
}