Не вызывается самописная функция форматирования в итогах
Добавлено: 07 май 2013, 11:59
Есть у меня отчет. Совершенно типичная задача - одноуровневая группировка с итогами под группой и общими итогами под отчетом. Весьма значительная часть отчета заполнена нулями - не хотелось из выводить.
Поставил соответствующую галку в свойствах "текста" на строках и в итогах. Отчет перестал выводится - подвисает даже на стадии формирования предпросмотра в дизайнере (еще одна проблема, которую хотелось бы разрешить).
Галку снял. Формулы в тексте дополнил вызовом самописной функции форматирования. Предпросмотр формируется, нули подавляются, итоги выводятся, но частично - где-то суммы есть, а где-то вместо них текст формулы из "текста" группировки с дополнением "#%#" перед формулой. Вообщем, что-то вида #%#{DecimalFix2(Sum(Данные1,dtDetails.StoreSumDeb))
Форматирование осуществляется кодом следюющео вида:
public static string DecimalFix(decimal arg, int scale, char decSeparator, char grSeparator, string rgSizes)
{
System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.NumberDecimalDigits = scale;
nfi.NumberDecimalSeparator = new string(decSeparator, 1);
nfi.NumberGroupSeparator = new string(grSeparator, 1);
List<int> grSeps = new List<int>();
foreach (string sep in rgSizes.Split(new char[] { ',' }))
if(sep.Trim()!="")
grSeps.Add(int.Parse(sep.Trim()));
nfi.NumberGroupSizes = grSeps.ToArray();
return arg.ToString("N",nfi);
}
string DecimalFix(decimal arg)
{
return DecimalFix(arg, 2, '.', ' ', "");
}
string DecimalFix2(decimal arg)
{
return arg == 0.0m ? "" : DecimalFix(arg, 2, '.', ' ', "");
}
В исходных данных ошибки нет. Используется System.Data.DataTable с типизированными колонками. Тип значений перед передачей в отчет я проверил - везде decimal.
Поставил соответствующую галку в свойствах "текста" на строках и в итогах. Отчет перестал выводится - подвисает даже на стадии формирования предпросмотра в дизайнере (еще одна проблема, которую хотелось бы разрешить).
Галку снял. Формулы в тексте дополнил вызовом самописной функции форматирования. Предпросмотр формируется, нули подавляются, итоги выводятся, но частично - где-то суммы есть, а где-то вместо них текст формулы из "текста" группировки с дополнением "#%#" перед формулой. Вообщем, что-то вида #%#{DecimalFix2(Sum(Данные1,dtDetails.StoreSumDeb))
Форматирование осуществляется кодом следюющео вида:
public static string DecimalFix(decimal arg, int scale, char decSeparator, char grSeparator, string rgSizes)
{
System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.NumberDecimalDigits = scale;
nfi.NumberDecimalSeparator = new string(decSeparator, 1);
nfi.NumberGroupSeparator = new string(grSeparator, 1);
List<int> grSeps = new List<int>();
foreach (string sep in rgSizes.Split(new char[] { ',' }))
if(sep.Trim()!="")
grSeps.Add(int.Parse(sep.Trim()));
nfi.NumberGroupSizes = grSeps.ToArray();
return arg.ToString("N",nfi);
}
string DecimalFix(decimal arg)
{
return DecimalFix(arg, 2, '.', ' ', "");
}
string DecimalFix2(decimal arg)
{
return arg == 0.0m ? "" : DecimalFix(arg, 2, '.', ' ', "");
}
В исходных данных ошибки нет. Используется System.Data.DataTable с типизированными колонками. Тип значений перед передачей в отчет я проверил - везде decimal.