There is a known issue of loss of formatting when setting form field text input value using Result property or SetTextInputValue method. For example, you have formatted your text form field as bold and it comes up as normal text when updated. For a workaround you can use the following wrapper method instead of using SetTextInputValue method directly:
Example
[C#]
private void SetFormFieldText(FormField formField, object value)
{
if ((value == null) || (value is string) && ((string)value == ""))
{
formField.Result = "";
return;
}
Node node = formField.PreviousSibling;
Node separator = null;
Run resultRun = null;
while (node != null && node.NodeType != NodeType.FieldSeparator)
{
// Take a run with formatting from form field code.
if (node is Run)
resultRun = (Run)node.Clone(true);
node = node.NextSibling;
}
separator = node;
while (node != null && node.NodeType != NodeType.FieldEnd)
{
// If form field value contains run then it is better to take it from here.
if (node is Run)
resultRun = (Run)node.Clone(true);
node = node.NextSibling;
}
formField.SetTextInputValue(value);
if (separator != null && resultRun != null)
{
resultRun.Text = separator.NextSibling.GetText();
separator.ParentNode.InsertAfter(resultRun, separator);
resultRun.NextSibling.Remove();
}
}
[VB .NET]
Private Sub SetFormFieldText(ByVal formField As FormField, ByVal value As Object)
If (value Is Nothing) OrElse (TypeOf value Is String) AndAlso (CStr(value) = "") Then
formField.Result = ""
Return
End If
Dim node As Node = formField.PreviousSibling
Dim separator As Node = Nothing
Dim resultRun As Run = Nothing
Do While Not node Is Nothing AndAlso node.NodeType <> NodeType.FieldSeparator
' Take a run with formatting from form field code.
If TypeOf node Is Run Then
resultRun = CType(node.Clone(True), Run)
End If
node = node.NextSibling
Loop
separator = node
Do While Not node Is Nothing AndAlso node.NodeType <> NodeType.FieldEnd
' If form field value contains run then it is better to take it from here.
If TypeOf node Is Run Then
resultRun = CType(node.Clone(True), Run)
End If
node = node.NextSibling
Loop
formField.SetTextInputValue(value)
If Not separator Is Nothing AndAlso Not resultRun Is Nothing Then
resultRun.Text = separator.NextSibling.GetText()
separator.ParentNode.InsertAfter(resultRun, separator)
resultRun.NextSibling.Remove()
End If
End Sub