Не могу зарегистрировать пустой список в DataSource

Обсуждение Stimulsoft Reports.NET
Ответить
Валерий В. Шинкевич
Сообщения: 83
Зарегистрирован: 21 фев 2007, 06:29
Откуда: Нижний Новгород/Йошкар-Ола

Не могу зарегистрировать пустой список в DataSource

Сообщение Валерий В. Шинкевич »

Код: Выделить всё

//polist список объектов (Business Objects)  реализует IList
Report.RegData("polist", polist);
вызывает эксепшн ArgumentOutofRangeExeption
{"Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.\r\nИмя параметра: index"}
в том случае, если список пустой.

обходится это проверкой

Код: Выделить всё

 if (polist.Count > 0) Report.RegData("polist", polist);
или вообще так -

Код: Выделить всё

 
if (polist.Count <= 0)
                {
                    Report.RenderedPages.Clear();
                    Report.IsRendered = false;
                    return false; // не удалось зарегистрировать данные
                }
С этим можно мириться для печати, просмотра - если нет данных - нет и отчета.
Но вот для дизайнера тоже нужно, чтобы словарь был заполнен пусть и пустыми источниками....

такие вот траблы.


Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Не могу зарегистрировать пустой список в DataSource

Сообщение Vital »

Пожалуйста пришлите пример бизнес объекта на email тех.поддержки.

Спасибо.
Валерий В. Шинкевич
Сообщения: 83
Зарегистрирован: 21 фев 2007, 06:29
Откуда: Нижний Новгород/Йошкар-Ола

Не могу зарегистрировать пустой список в DataSource

Сообщение Валерий В. Шинкевич »

Vital писал(а):Пожалуйста пришлите пример бизнес объекта на email тех.поддержки.

Спасибо.
чтож... попробую подобрать пример попроще (вырезать объекты из проекта не так-то просто....)

А пока я малость порылся в поисках возможных причин и вот что хотел бы сказать:

A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.Collections.ArrayList.RemoveAt(Int32 index)
в Stimulsoft.Report.Dictionary.StiBusinessObjectToDataSet.ProcessItem(DataTable table, Object obj, Type typeOfData, DataRow row, String tableName, ArrayList tableList, ArrayList tableNames, String uniqueIndex, String columnName)
в Stimulsoft.Report.Dictionary.StiBusinessObjectToDataSet.FillDataTableFromType(DataTable table, String tableName, ArrayList tableList, ArrayList tableNames, String nameID, Object valueID)
в Stimulsoft.Report.Dictionary.StiBusinessObjectToDataSet.FillDataTable(DataTable table, String tableName, ArrayList tableList, ArrayList tableNames, Object obj, String nameID, Object valueID)
в Stimulsoft.Report.Dictionary.StiBusinessObjectToDataSet.ConvertBusinessObjectToDataTable(String tableName, ArrayList tableList, ArrayList tableNames, Object obj, Type typeOfData, String& nameID, Object valueID)
в Stimulsoft.Report.Dictionary.StiBusinessObjectToDataSet.ConvertBusinessObjectToDataSet(String name, Object obj)
в Stimulsoft.Report.Dictionary.StiDataCollection.RegData(String name, Object data)
в Stimulsoft.Report.StiReport.RegData(String name, Object data)
в BusinessLib.Reports.KeeperReport.PrepareData(Boolean forDesign) в \Reports\KeeperReport.cs:строка 68

исключение возникает в методе

Код: Выделить всё

private void ProcessItem(DataTable table, object obj, Type typeOfData, DataRow row, string tableName, ArrayList tableList, ArrayList tableNames, string uniqueIndex, string columnName)
этот метод вызывается из FillDataTableFromType следующим образом

Код: Выделить всё

this.ProcessItem(table, null, column.DataType, null, tableName, tableList, tableNames, uniqueIndex, column.ColumnName);

Код: Выделить всё

if (obj != null)   <----- это условие будет ложно!!!
                {
                    tableList.Add(obj);
                }
                tableNames.Add(columnName);
                DataTable table2 = this.ConvertBusinessObjectToDataTable(baseName, tableList, tableNames, obj, typeOfData, ref nameID, table.Rows.Count);,

// и далее удаляем из пустого массива  - исключение !

                tableList.RemoveAt(tableList.Count - 1);  
                tableNames.RemoveAt(tableNames.Count - 1);

Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Не могу зарегистрировать пустой список в DataSource

Сообщение Vital »

Проверьте билд от 14 мая.

Спасибо.
Ответить