DataTplProductList.cs
C# VB
//// This code is part of Document Solutions for Word demos.// Copyright (c) MESCIUS inc. All rights reserved.//using System.IO;using System.Collections.Generic;using System.Data;using System.Linq;using System.Globalization;using GrapeCity.Documents.Word;
namespace DsWordWeb.Demos{ // This data template sample loads a DOCX that was created in MS Word, // and contains a table with data template tags. It then creates a DataSet, // loads the DsNWind.xml data base into it, and builds a product list // from tables in that data set. The product list is set as the template // data source on the document, and the template is processed to build // the final document with actual data. public class DataTplProductList { public GcWordDocument CreateDocx(string[] sampleParams) { var doc = new GcWordDocument();
// Load the template DOCX: doc.Load(Path.Combine("Resources", "WordDocs", sampleParams[3]));
using var ds = new DataSet(); // Load the data and build the product list data source: ds.ReadXml(Path.Combine("Resources", "data", "DsNWind.xml"));
DataTable dtProds = ds.Tables["Products"]; DataTable dtSupps = ds.Tables["Suppliers"];
var products = from prod in dtProds.Select() join supp in dtSupps.Select() on prod["SupplierID"] equals supp["SupplierID"] orderby prod["ProductName"] select new { ProductID = prod["ProductID"], ProductName = prod["ProductName"], Supplier = supp["CompanyName"], QuantityPerUnit = prod["QuantityPerUnit"], UnitPrice = prod["UnitPrice"] };
// Add the data source to the data template data sources: doc.DataTemplate.DataSources.Add("ds", products);
// The document already has all the necessary bindings, // so we only need to process the data template: doc.DataTemplate.Process(CultureInfo.GetCultureInfo("en-US"));
// Done: return doc; }
public GcWordDocument CreateDocx(int paramIdx = 0) { return CreateDocx(GetSampleParamsList()[paramIdx]); }
public static List<string[]> GetSampleParamsList() { // Strings are name, description, info, template docx: return new List<string[]>() { new string[] { "@data-templates/Product List", "Load a template DOCX and bind it to a product list from an XML data set", null, "ProductListTemplate.docx" }, new string[] { "@data-templates/Formatter Chain", "Load a template that uses chained formatters to highlight products that cost $50+", null, "ProductListTemplate-cond.docx" }, }; } }}