using System; using System.Collections.Generic; using System.Linq; using Northwind; using NorthwindAPI.BusinessObject; using NorthwindAPI; // using System.Windows.Forms; // Note: remove comment when using with windows forms /// <summary> /// These are data-centric code examples for the Products table. /// You can cut and paste the respective codes into your application /// by changing the sample values assigned from these examples. /// NOTE: This class contains private methods because they're /// not meant to be called by an outside client. Each method contains /// code for the respective example being shown. /// These examples shows how to call the Business Object (or the Middler Layer or Middler Tier) from a client. /// A client can be a Windows Form, WPF app, Silverlight app, ASP.NET Web Form/MVC/Razor app, a Web API, a Class, and many more. /// </summary> public sealed class ProductsExample { private ProductsExample() { } /// <summary> /// Shows how to Select all records. It also shows how to sort, bind, and loop through records. /// </summary> private async void SelectAllAsync() { // select all records List<Products> objProductsCol = await Products.SelectAllAsync(); // Example 1: you can optionally sort the collection in ascending order by your chosen field objProductsCol.Sort(Products.ByProductName); // Example 2: to sort in descending order, add this line to the Sort code in Example 1 objProductsCol.Reverse(); // Example 3: directly bind to a GridView - for ASP.NET Web Forms // GridView grid = new GridView(); // grid.DataSource = objProductsCol; // grid.DataBind(); // Example 4: loop through all the Products(s) foreach (Products objProducts in objProductsCol) { int productID = objProducts.ProductID; string productName = objProducts.ProductName; int? supplierID = objProducts.SupplierID; int? categoryID = objProducts.CategoryID; string quantityPerUnit = objProducts.QuantityPerUnit; decimal? unitPrice = objProducts.UnitPrice; Int16? unitsInStock = objProducts.UnitsInStock; Int16? unitsOnOrder = objProducts.UnitsOnOrder; Int16? reorderLevel = objProducts.ReorderLevel; bool discontinued = objProducts.Discontinued; // get the Suppliers related to SupplierID. if (objProducts.SupplierID != null) { Suppliers objSuppliersRelatedToSupplierID = await Suppliers.SelectByPrimaryKeyAsync(supplierID.Value); } // get the Categories related to CategoryID. if (objProducts.CategoryID != null) { Categories objCategoriesRelatedToCategoryID = await Categories.SelectByPrimaryKeyAsync(categoryID.Value); } } } /// <summary> /// Shows how to Select all records sorted by column name in either ascending or descending order. /// </summary> private async void SelectAllWithSortExpression() { // select all records sorted by ProductID in ascending order string sortBy = "ProductID"; // ascending order //string sortBy = "ProductID desc"; // descending order List<Products> objProductsCol = await Products.SelectAllAsync(sortBy); } /// <summary> /// Shows how to Select a record by Primary Key. It also shows how to retrieve Lazily-loaded related Objects. Related Objects are assigned for each Foreign Key. /// </summary> private async void SelectByPrimaryKeyAsync() { int productIDSample = 1; // select a record by primary key(s) Products objProducts = await Products.SelectByPrimaryKeyAsync(productIDSample); if (objProducts != null) { // if record is found, a record is returned int productID = objProducts.ProductID; string productName = objProducts.ProductName; int? supplierID = objProducts.SupplierID; int? categoryID = objProducts.CategoryID; string quantityPerUnit = objProducts.QuantityPerUnit; decimal? unitPrice = objProducts.UnitPrice; Int16? unitsInStock = objProducts.UnitsInStock; Int16? unitsOnOrder = objProducts.UnitsOnOrder; Int16? reorderLevel = objProducts.ReorderLevel; bool discontinued = objProducts.Discontinued; // get the Suppliers related to SupplierID. if (objProducts.SupplierID != null) { Suppliers objSuppliersRelatedToSupplierID = await Suppliers.SelectByPrimaryKeyAsync(supplierID.Value); } // get the Categories related to CategoryID. if (objProducts.CategoryID != null) { Categories objCategoriesRelatedToCategoryID = await Categories.SelectByPrimaryKeyAsync(categoryID.Value); } } } /// <summary> /// The example below shows how to Select the ProductID and ProductName columns for use with a with a Drop Down List, Combo Box, Checked Box List, List View, List Box, etc /// </summary> private async void SelectProductsDropDownListDataAsync() { List<Products> objProductsCol = await Products.SelectProductsDropDownListDataAsync(); // Example 1: directly bind to a drop down list - for ASP.NET Web Forms // DropDownList ddl1 = new DropDownList(); // ddl1.DataValueField = "ProductID"; // ddl1.DataTextField = "ProductName"; // ddl1.DataSource = objProductsCol; // ddl1.DataBind(); // Example 2: add each item through a loop - for ASP.NET Web Forms // DropDownList ddl2 = new DropDownList(); // foreach (Products objProducts in objProductsCol) // { // ddl2.Items.Add(new ListItem(objProducts.ProductName, objProducts.ProductID.ToString())); // } // Example 3: bind to a combo box. for Windows Forms (WinForms) // ComboBox cbx1 = new ComboBox(); // foreach (Products objProducts in objProductsCol) // { // cbx1.Items.Add(new ListItem(objProducts.ProductName, objProducts.ProductID.ToString())); // } } /// <summary> /// Shows how to Insert or Create a New Record /// </summary> private async void Insert() { // first instantiate a new Products Products objProducts = new Products(); // assign values you want inserted objProducts.ProductName = "Chai"; objProducts.SupplierID = 1; objProducts.CategoryID = 1; objProducts.QuantityPerUnit = "10 boxes x 20 bags"; objProducts.UnitPrice = Convert.ToDecimal("18.0000"); objProducts.UnitsInStock = 39; objProducts.UnitsOnOrder = 0; objProducts.ReorderLevel = 10; objProducts.Discontinued = false; // finally, insert a new record // the insert method returns the newly created primary key int newlyCreatedPrimaryKey = await objProducts.InsertAsync(); } /// <summary> /// Shows how to Update an existing record by Primary Key /// </summary> private async void UpdateAsync() { // first instantiate a new Products Products objProducts = new Products(); // assign the existing primary key(s) // of the record you want updated objProducts.ProductID = 1; // assign values you want updated objProducts.ProductName = "Chai"; objProducts.SupplierID = 1; objProducts.CategoryID = 1; objProducts.QuantityPerUnit = "10 boxes x 20 bags"; objProducts.UnitPrice = Convert.ToDecimal("18.0000"); objProducts.UnitsInStock = 39; objProducts.UnitsOnOrder = 0; objProducts.ReorderLevel = 10; objProducts.Discontinued = false; // finally, update an existing record await objProducts.UpdateAsync(); } /// <summary> /// Shows how to Delete an existing record by Primary Key /// </summary> private async void DeleteAsync() { // delete a record by primary key await Products.DeleteAsync(84); } /// <summary> /// Shows how to Delete Multiple records by Primary Key /// </summary> private async void DeleteMultpleAsync() { // sample data only, in the real world you should use different values string ids = "84, 84"; // split ids into a List List<Int32> productIDList = ids.Split(",").Select(Int32.Parse).ToList(); // delete multiple records based on a list of ids (primary keys) await Products.DeleteMultipleAsync(productIDList); } /// <summary> /// Shows how to get the total number of records /// </summary> private async void GetRecordCountAsync() { // get the total number of records in the Products table int totalRecordCount = await Products.GetRecordCountAsync(); } /// <summary> /// Shows how to get the total number of records by SupplierID /// </summary> private async void GetRecordCountBySupplierIDAsync() { // get the total number of records in the Products table by SupplierID // 1 here is just a sample SupplierID change the value as you see fit int totalRecordCount = await Products.GetRecordCountBySupplierIDAsync(1); } /// <summary> /// Shows how to get the total number of records by CategoryID /// </summary> private async void GetRecordCountByCategoryIDAsync() { // get the total number of records in the Products table by CategoryID // 1 here is just a sample CategoryID change the value as you see fit int totalRecordCount = await Products.GetRecordCountByCategoryIDAsync(1); } /// <summary> /// Shows how to get the total number of records based on Search Parameters. /// </summary> private async void GetRecordCountDynamicWhereAsync() { // search parameters, everything is nullable, only items being searched for should be filled // note: fields with String type uses a LIKE search, everything else uses an exact match // also, every field you're searching for uses the AND operator // e.g. int? productID = 1; string productName = "ch"; // will translate to: SELECT....WHERE productID = 1 AND productName LIKE '%ch%' int? productID = null; string productName = null; int? supplierID = null; int? categoryID = null; string quantityPerUnit = null; decimal? unitPrice = null; Int16? unitsInStock = null; Int16? unitsOnOrder = null; Int16? reorderLevel = null; bool? discontinued = null; int totalRecordCount = await Products.GetRecordCountDynamicWhereAsync(productID, productName, supplierID, categoryID, quantityPerUnit, unitPrice, unitsInStock, unitsOnOrder, reorderLevel, discontinued); } /// <summary> /// Shows how to get a specific number of sorted records, starting from an index. The total number of records are also retrieved when using the SelectSkipAndTake() method. /// For example, if there are 200 records take only 10 records (numberOfRecordsToRetrieve), starting from the first index (startRetrievalFromRecordIndex = 0) /// The example below uses some variables, here are their definitions: /// totalRecordCount - total number of records if you were to retrieve everything /// startRetrievalFromRecordIndex - the index to start taking records from. Zero (0) E.g. If you want to skip the first 20 records, then assign 19 here. /// numberOfRecordsToRetrieve - take n records starting from the startRetrievalFromRecordIndex /// sortBy - to sort in Ascending order by Field Name, just assign just the Field Name, do not pass 'asc' /// sortBy - to sort in Descending order by Field Name, use the Field Name, a space and the word 'desc' /// </summary> private async void SelectSkipAndTakeAsync() { int startRetrievalFromRecordIndex = 0; int numberOfRecordsToRetrieve = 10; string sortBy = "ProductID"; //string sortBy = "ProductID desc"; // 1. select a specific number of sorted records starting from the index you specify List<Products> objProductsCol = await Products.SelectSkipAndTakeAsync(numberOfRecordsToRetrieve, startRetrievalFromRecordIndex, sortBy); // to use objProductsCol please see the SelectAll() method examples // No need for Examples 1 and 2 because the Collection here is already sorted // Example 2: directly bind to a GridView - for ASP.NET Web Forms // Example 3: loop through all the Products(s). The example above will only loop for 10 items. } /// <summary> /// Shows how to get a specific number of sorted records, starting from an index by the related Field Name. The total number of records are also retrieved when using the SelectSkipAndTake() method. /// For example, if there are 200 records, take only 10 records (numberOfRecordsToRetrieve), starting from the first index (startRetrievalFromRecordIndex = 0) /// The example below uses some variables, here are their definitions: /// totalRecordCount - total number of records if you were to retrieve everything /// startRetrievalFromRecordIndex - the index to start taking records from. Zero (0) E.g. If you want to skip the first 20 records, then assign 19 here. /// numberOfRecordsToRetrieve - take n records starting from the startRetrievalFromRecordIndex /// sortBy - to sort in Ascending order by Field Name, just assign just the Field Name, do not pass 'asc' /// sortBy - to sort in Descending order by Field Name, use the Field Name, a space and the word 'desc' /// </summary> private async void SelectSkipAndTakeBySupplierIDAsync() { int startRetrievalFromRecordIndex = 0; int numberOfRecordsToRetrieve = 10; string sortBy = "ProductID"; //string sortBy = "ProductID desc"; // 1. select a specific number of sorted records with a SupplierID = 1 // starting from the index you specify List<Products> objProductsCol = await Products.SelectSkipAndTakeBySupplierIDAsync(numberOfRecordsToRetrieve, startRetrievalFromRecordIndex, sortBy, 1); // to use objProductsCol please see the SelectAll() method examples // No need for Examples 1 and 2 because the Collection here is already sorted // Example 3: directly bind to a GridView - for ASP.NET Web Forms // Example 4: loop through all the Products(s). The example above will only loop for 10 items. } /// <summary> /// Shows how to get a specific number of sorted records, starting from an index by the related Field Name. The total number of records are also retrieved when using the SelectSkipAndTake() method. /// For example, if there are 200 records, take only 10 records (numberOfRecordsToRetrieve), starting from the first index (startRetrievalFromRecordIndex = 0) /// The example below uses some variables, here are their definitions: /// totalRecordCount - total number of records if you were to retrieve everything /// startRetrievalFromRecordIndex - the index to start taking records from. Zero (0) E.g. If you want to skip the first 20 records, then assign 19 here. /// numberOfRecordsToRetrieve - take n records starting from the startRetrievalFromRecordIndex /// sortBy - to sort in Ascending order by Field Name, just assign just the Field Name, do not pass 'asc' /// sortBy - to sort in Descending order by Field Name, use the Field Name, a space and the word 'desc' /// </summary> private async void SelectSkipAndTakeByCategoryIDAsync() { int startRetrievalFromRecordIndex = 0; int numberOfRecordsToRetrieve = 10; string sortBy = "ProductID"; //string sortBy = "ProductID desc"; // 1. select a specific number of sorted records with a CategoryID = 1 // starting from the index you specify List<Products> objProductsCol = await Products.SelectSkipAndTakeByCategoryIDAsync(numberOfRecordsToRetrieve, startRetrievalFromRecordIndex, sortBy, 1); // to use objProductsCol please see the SelectAll() method examples // No need for Examples 1 and 2 because the Collection here is already sorted // Example 3: directly bind to a GridView - for ASP.NET Web Forms // Example 4: loop through all the Products(s). The example above will only loop for 10 items. } /// <summary> /// Shows how to get a specific number of sorted records, starting from an index, based on Search Parameters. The number of records are also retrieved. /// </summary> private async void SelectSkipAndTakeDynamicWhereAsync() { int startRetrievalFromRecordIndex = 0; int numberOfRecordsToRetrieve = 10; string sortBy = "ProductID"; //string sortBy = "ProductID desc"; // search parameters, everything is nullable, only items being searched for should be filled // note: fields with String type uses a LIKE search, everything else uses an exact match // also, every field you're searching for uses the AND operator // e.g. int? productID = 1; string productName = "ch"; // will translate to: SELECT....WHERE productID = 1 AND productName LIKE '%ch%' int? productID = null; string productName = null; int? supplierID = null; int? categoryID = null; string quantityPerUnit = null; decimal? unitPrice = null; Int16? unitsInStock = null; Int16? unitsOnOrder = null; Int16? reorderLevel = null; bool? discontinued = null; // 1. select a specific number of sorted records starting from the index you specify based on Search Parameters List<Products> objProductsCol = await Products.SelectSkipAndTakeDynamicWhereAsync(productID, productName, supplierID, categoryID, quantityPerUnit, unitPrice, unitsInStock, unitsOnOrder, reorderLevel, discontinued, numberOfRecordsToRetrieve, startRetrievalFromRecordIndex, sortBy); // to use objProductsCol please see the SelectAll() method examples // No need for Examples 1 and 2 because the Collection here is already sorted // Example 3: directly bind to a GridView - for ASP.NET Web Forms // Example 4: loop through all the Products(s). The example above will only loop for 10 items. } /// <summary> /// Shows how to get all records based on Search Parameters. /// </summary> private async void SelectAllDynamicWhereAsync() { // search parameters, everything is nullable, only items being searched for should be filled // note: fields with String type uses a LIKE search, everything else uses an exact match // also, every field you're searching for uses the AND operator // e.g. int? productID = 1; string productName = "ch"; // will translate to: SELECT....WHERE productID = 1 AND productName LIKE '%ch%' int? productID = null; string productName = null; int? supplierID = null; int? categoryID = null; string quantityPerUnit = null; decimal? unitPrice = null; Int16? unitsInStock = null; Int16? unitsOnOrder = null; Int16? reorderLevel = null; bool? discontinued = null; List<Products> objProductsCol = await Products.SelectAllDynamicWhereAsync(productID, productName, supplierID, categoryID, quantityPerUnit, unitPrice, unitsInStock, unitsOnOrder, reorderLevel, discontinued); } /// <summary> /// Shows how to get all records based on Search Parameters sorted by column name in either ascending or descending order. /// </summary> private async void SelectAllDynamicWhereWithSortExpression() { // search parameters, everything is nullable, only items being searched for should be filled // note: fields with String type uses a LIKE search, everything else uses an exact match // also, every field you're searching for uses the AND operator // e.g. int? productID = 1; string productName = "ch"; // will translate to: SELECT....WHERE productID = 1 AND productName LIKE '%ch%' int? productID = null; string productName = null; int? supplierID = null; int? categoryID = null; string quantityPerUnit = null; decimal? unitPrice = null; Int16? unitsInStock = null; Int16? unitsOnOrder = null; Int16? reorderLevel = null; bool? discontinued = null; string sortBy = "ProductID"; // ascending order //string sortBy = "ProductID desc"; // descending order List<Products> objProductsCol = await Products.SelectAllDynamicWhereAsync(productID, productName, supplierID, categoryID, quantityPerUnit, unitPrice, unitsInStock, unitsOnOrder, reorderLevel, discontinued, sortBy); } }