Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/Reporting/CS/ReportWpfDemo/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/Reporting/CS/ReportWpfDemo/DataFillVisitor.cs

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
    }
}