''
'' This code is part of Document Solutions for Word demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports GrapeCity.Documents.Word
'' This example shows how to deal with the 'data source with this name already exists' error.
Public Class DataTplFixDuplicateDataSource
'' Code demonstrating the problem:
Private Function Problem() As GcWordDocument
Using oceans = File.OpenRead(Path.Combine("Resources", "data", "oceans.json")),
oceans1 = File.OpenRead(Path.Combine("Resources", "data", "oceans.json"))
Dim doc = New GcWordDocument()
doc.DataTemplate.DataSources.Add("ds", oceans)
'' Incorrect: data source with the name "ds" already exists, so this will throw:
doc.DataTemplate.DataSources.Add("ds", oceans1)
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")),
oceans1 = File.OpenRead(Path.Combine("Resources", "data", "oceans.json"))
Dim doc = New GcWordDocument()
doc.DataTemplate.DataSources.Add("ds", oceans)
'' Correct: give each data source a unique name:
doc.DataTemplate.DataSources.Add("ds1", oceans1)
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 code tried to add two data sources with the same name. " +
$"The fix is to use a unique name for each data source added to the GcWordDocument.DataTemplate.DataSources collection.",
doc.Styles(BuiltInStyleId.BlockText),
InsertLocation.Start)
End Try
Return doc
End Function
End Class