/// <summary> /// Writes the repeater. /// </summary> /// <param name="sb">The string builder.</param> /// <param name="repeater">The repeater.</param> /// <param name="includedControls">The included controls.</param> /// <param name="applicationData">The application data.</param> private void WriteRepeater(StringBuilder sb, RepeaterControl repeater, IncludedControlList includedControls, ApplicationData applicationData) { this.WriteHeaderRow(sb, repeater.Name, FormatterResources.RepeaterStyles); Dictionary<string, object>[] repeaterVals = applicationData.GetRepeaterItemsOrDefault(repeater.Name); var i = 1; foreach (var row in repeaterVals) { var additionalStyles = i % 2 == 0 ? FormatterResources.AltRepeaterRowStyle : string.Empty; if (repeater.DisplayRowNumber) { this.WriteHeaderRow(sb, string.Format("Row {0}", i), string.Format("{0} {1}", FormatterResources.RepeaterRowHeaderStyle, additionalStyles)); } foreach (var field in row) { var control = repeater.Controls.FindRecursive(c => c.Name == field.Key); if (control != null && (includedControls.All || includedControls.Controls.Contains(field.Key))) { this.WriteRow(sb, field.Key, this.GetValueToWrite(control, field.Value as string), additionalStyles); } } i++; } }