/// <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++;
            }
        }