Небольшой пост о решении проблемы с пропадающими TextBox'ами в отчетах, построенных на Telerik.
Инсценировка траблы
Строим новый отчет в Visual Studio. При этом в отчете для заполнения данных присутствуют TextBox'ы. Хотя бы вот так: Теперь перейдем к внутренностям. Создаем класс-пустышку для того, чтобы было чем отчет наполнить. В конструкторе отчета создадим коллекцию этих пустышек и заполним ими отчет. У меня получился следующий код отчета:
using Telerik.Reporting;
namespace ZhukBlog.Demo.MissingTextBoxTelerik
{
publicpartialclass SimpleReport : Report
{
public SimpleReport()
{
InitializeComponent();
// Генерируем коллекцию пустышек с пустыми текстовыми значениями
var items = new[]
{
// Все ОК
new ReportDataItem {Text1 = "Text1PropertyValue", Text2 = "Text2PropertyValue"},
// Второе свойство пустое
new ReportDataItem {Text1 = "Text1PropertyValue", Text2 = string.Empty},
// Первое свойство отсутствует
new ReportDataItem {Text1 = null, Text2 = "Text2PropertyValue"}
};
DataSource = items;
}
}
/// <summary>
/// Класс - пустышка для демонстрации
/// </summary>
publicclass ReportDataItem
{
publicstring Text1 { get; set; }
publicstring Text2 { get; set; }
}
}
Запускаем отчет на просмотр в веб-приложении, используя при этом ReportViewer, и видим примерно следующее:
Лечим
TextBox не рисуется в случае, если его содержимое пусто. Поэтому подменяем эту пустоту другой, правильной пустотой, т.е. Non Breaking Space. В UTF кодировки это будет 0x00A0. Заменяем в 16 строке string.Empty на "\u00A0". То же самое проделываем с null в строке 18. Запускаем отчет в браузере и смотрим:
Техлид, Архитектор, Разработчик, Microsoft MVP. Более 20 лет опыта в области системной интеграции и разработки программного обеспечения. Специализируюсь на проектировании и внедрении масштабируемых высокопроизводительных программных решений в различных отраслях.