DataTplFixNoDataSources.vb
C# VB
'''' This code is part of Document Solutions for Word demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.IOImports System.GlobalizationImports GrapeCity.Documents.Word
'' This example shows how to deal with the 'data source with this name already exists' error.Public Class DataTplFixNoDataSources '' Code demonstrating the problem: Private Function Problem() As GcWordDocument Using oceans = File.OpenRead(Path.Combine("Resources", "data", "oceans.json")) Dim doc = New GcWordDocument() doc.Body.Paragraphs.Add("{{ds.name}}") '' Incorrect: no data sources have been added when the DataTemplate.Process() method is called: doc.DataTemplate.Process(CultureInfo.GetCultureInfo("en-US")) Return doc End Using End Function
'' Code demonstrating the fix: Private Function Fix() As GcWordDocument Using oceans = File.OpenRead(Path.Combine("Resources", "data", "oceans.json")) Dim doc = New GcWordDocument() doc.Body.Paragraphs.Add("{{ds.name}}") doc.DataTemplate.DataSources.Add("ds", oceans) '' Correct: the data source have been added prior to calling the DataTemplate.Process() method: doc.DataTemplate.Process(CultureInfo.GetCultureInfo("en-US")) Return doc End Using End Function
Function CreateDocx() As GcWordDocument Dim doc As GcWordDocument Try '' This fails: doc = Problem() Catch ex As Exception '' This works: doc = Fix() '' Insert a brief explanation of the problem and the fix into the generated document: doc.Body.Paragraphs.Insert( $"The error ""{ex.Message}"" occurred because the DataTemplate.Process() method was called before adding the data source. " + $"The fix is to add the data sources prior to calling the DataTemplate.Process() method.", doc.Styles(BuiltInStyleId.BlockText), InsertLocation.Start) End Try Return doc End FunctionEnd Class