0

У меня есть отчет, который отлично отображает, когда я заполняю его данными. У меня есть сложные диаграммы, таблицы и множество данных (около 20 000 объектов памяти). Мой отчет выглядел отлично, пока я не добавил цикл for для вычисления некоторых данных. Цикл обработки выглядит следующим образом:Reportviewer показывает пустую страницу после добавления кода

 public void InsertLineBreaks(List<LineChart> inputList, int sampleInterval) 
    { 
     List<LineChart> breaklinesList = new List<LineChart> { }; 
     for (int i = 1; i <= inputList.Count; i++) 
     { 
      if ((inputList[i].X - inputList[i - 1].X).TotalMinutes > sampleInterval) 
      { 
       LineChart breakline = inputList[i]; 
       breakline.BreakLine = 1; 
       breaklinesList.Add(breakline); 
      } 
      inputList.AddRange(breaklinesList); 

     } 

Этот код в основном проверяет, если в каждом случае один и тот же интервал добавляет брешь. Когда я добавляю этот код, мой Reportviewer напрямую показывает пустую страницу без каких-либо ошибок или элементов управления отчетами (далее, печать, экспорт и т. Д.). Однако, если я прокомментирую этот код, отчет генерирует только штраф без каких-либо проблем.

Я попытался отладить код и поставить точку останова на источники данных. Я был удивлен, увидев, что Reportviewer все еще работает и показывает пустую страницу, несмотря на точку останова. Таким образом, очевидно, что данные не привязаны, и поэтому средство просмотра отчетов пуст.

Я подозреваю, что Reportviewer превышает выделенную ему память, поэтому пропускает мой код и привязывает данные и печатает пустую страницу. Может ли кто-нибудь помочь?

+0

Вы проверили журнал событий? Я видел случаи, когда это было единственное место, где были найдены проблемы с конкретным кодом. – Jeroen

+0

Спасибо Jeroen, я проверил журнал, но это не помогло. –

ответ

0

Проблема была не в памяти построителя отчетов, а в моем коде. я изменил код на следующий и работал:

public void InsertLineBreaks(List<LineChart> inputList, int sampleInterval) 
{ 
    List<LineChart> breaklinesList = new List<LineChart> { }; 
    for (int i = 1; i <= inputList.Count; i++) 
    { 
     if ((inputList[i].X - inputList[i - 1].X).TotalMinutes > sampleInterval) 
     { 
      LineChart breakline = inputList[i]; 
      breakline.BreakLine = 1; 
      breaklinesList.Add(breakline); 
     } 

    } 
inputList.AddRange(breaklinesList); 

} 
Смежные вопросы