This is a migrated thread and some comments may be shown as answers.

ArrayList as report DataSource

2 Answers 72 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Boots
Top achievements
Rank 1
Boots asked on 11 Nov 2009, 10:42 PM
Hello,

I updated our reports to version 3.2.9.1104 and most of them broke. The reports that broke the only difference i could see is they are using ArrayLists populated with BusinessObjects, If I use an ObservableCollection<T> it seems to work just fine. Any help on this problem would be great.

some sample code
this one works
public partial class Window1 : Window 
    { 
        public Window1() 
        { 
            InitializeComponent(); 
            ReportViewer rv = new ReportViewer(); 
            Report1 rpt = new Report1(); 
 
            ObservableCollection<MyObject> ary = GenerateData(); 
 
            rpt.DataSource = ary; 
            rv.Report = rpt; 
            rv.RefreshReport();
            //wfh is WindowsFormsHost
            wfh.Child = rv; 
        } 
 
 
        private static ObservableCollection<MyObject> GenerateData() 
        { 
            ObservableCollection<MyObject> data = new ObservableCollection<MyObject>(); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Tata", Region = "Europe", Sales = 11 }); 
 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Tata", Region = "Europe", Sales = 12 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Tata", Region = "Europe", Sales = 13 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Tata", Region = "Europe", Sales = 14 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Tata", Region = "Asia", Sales = 15 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Tata", Region = "Asia", Sales = 16 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Tata", Region = "Asia", Sales = 17 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Tata", Region = "Asia", Sales = 17 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Tata", Region = "Africa", Sales = 19 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Tata", Region = "Africa", Sales = 20 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Tata", Region = "Africa", Sales = 21 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Tata", Region = "Africa", Sales = 22 }); 
 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Tata", Region = "Europe", Sales = 111 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Tata", Region = "Europe", Sales = 112 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Tata", Region = "Europe", Sales = 113 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Tata", Region = "Europe", Sales = 114 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Tata", Region = "Asia", Sales = 115 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Tata", Region = "Asia", Sales = 116 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Tata", Region = "Asia", Sales = 117 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Tata", Region = "Asia", Sales = 118 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Tata", Region = "Africa", Sales = 119 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Tata", Region = "Africa", Sales = 120 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Tata", Region = "Africa", Sales = 121 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Tata", Region = "Africa", Sales = 122 }); 
 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Toyota", Region = "Europe", Sales = 22 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Toyota", Region = "Europe", Sales = 23 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Toyota", Region = "Europe", Sales = 24 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Toyota", Region = "Europe", Sales = 25 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Toyota", Region = "Asia", Sales = 26 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Toyota", Region = "Asia", Sales = 27 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Toyota", Region = "Asia", Sales = 28 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Toyota", Region = "Asia", Sales = 29 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Toyota", Region = "Africa", Sales = 30 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Toyota", Region = "Africa", Sales = 31 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Toyota", Region = "Africa", Sales = 32 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Toyota", Region = "Africa", Sales = 33 }); 
 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Toyota", Region = "Europe", Sales = 122 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Toyota", Region = "Europe", Sales = 123 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Toyota", Region = "Europe", Sales = 124 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Toyota", Region = "Europe", Sales = 125 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Toyota", Region = "Asia", Sales = 126 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Toyota", Region = "Asia", Sales = 127 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Toyota", Region = "Asia", Sales = 128 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Toyota", Region = "Asia", Sales = 129 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Toyota", Region = "Africa", Sales = 130 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Toyota", Region = "Africa", Sales = 131 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Toyota", Region = "Africa", Sales = 132 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Toyota", Region = "Africa", Sales = 133 }); 
 
            return data; 
        } 
    } 
 
    public class MyObject 
    { 
        public string Make 
        { 
            get
            set
        } 
 
        public string Quarter 
        { 
            get
            set
        } 
 
        public int Year 
        { 
            get
            set
        } 
 
        public string Region 
        { 
            get
            set
        } 
 
        public decimal Sales 
        { 
            get
            set
        } 
    } 

this one doesn't
public partial class Window1 : Window 
    { 
        public Window1() 
        { 
            InitializeComponent(); 
            ReportViewer rv = new ReportViewer(); 
            Report1 rpt = new Report1(); 
 
            ArrayList ary = GenerateData(); 
 
            rpt.DataSource = ary; 
            rv.Report = rpt; 
            rv.RefreshReport();
            //wfh is WindowsFormsHost
            wfh.Child = rv; 
        } 
 
 
        private static ArrayList GenerateData() 
        { 
            ArrayList data = new ArrayList(); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Tata", Region = "Europe", Sales = 11 }); 
 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Tata", Region = "Europe", Sales = 12 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Tata", Region = "Europe", Sales = 13 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Tata", Region = "Europe", Sales = 14 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Tata", Region = "Asia", Sales = 15 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Tata", Region = "Asia", Sales = 16 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Tata", Region = "Asia", Sales = 17 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Tata", Region = "Asia", Sales = 17 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Tata", Region = "Africa", Sales = 19 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Tata", Region = "Africa", Sales = 20 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Tata", Region = "Africa", Sales = 21 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Tata", Region = "Africa", Sales = 22 }); 
 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Tata", Region = "Europe", Sales = 111 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Tata", Region = "Europe", Sales = 112 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Tata", Region = "Europe", Sales = 113 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Tata", Region = "Europe", Sales = 114 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Tata", Region = "Asia", Sales = 115 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Tata", Region = "Asia", Sales = 116 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Tata", Region = "Asia", Sales = 117 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Tata", Region = "Asia", Sales = 118 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Tata", Region = "Africa", Sales = 119 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Tata", Region = "Africa", Sales = 120 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Tata", Region = "Africa", Sales = 121 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Tata", Region = "Africa", Sales = 122 }); 
 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Toyota", Region = "Europe", Sales = 22 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Toyota", Region = "Europe", Sales = 23 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Toyota", Region = "Europe", Sales = 24 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Toyota", Region = "Europe", Sales = 25 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Toyota", Region = "Asia", Sales = 26 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Toyota", Region = "Asia", Sales = 27 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Toyota", Region = "Asia", Sales = 28 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Toyota", Region = "Asia", Sales = 29 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q1", Make = "Toyota", Region = "Africa", Sales = 30 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q2", Make = "Toyota", Region = "Africa", Sales = 31 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q3", Make = "Toyota", Region = "Africa", Sales = 32 }); 
            data.Add(new MyObject() { Year = 2007, Quarter = "Q4", Make = "Toyota", Region = "Africa", Sales = 33 }); 
 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Toyota", Region = "Europe", Sales = 122 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Toyota", Region = "Europe", Sales = 123 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Toyota", Region = "Europe", Sales = 124 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Toyota", Region = "Europe", Sales = 125 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Toyota", Region = "Asia", Sales = 126 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Toyota", Region = "Asia", Sales = 127 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Toyota", Region = "Asia", Sales = 128 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Toyota", Region = "Asia", Sales = 129 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q1", Make = "Toyota", Region = "Africa", Sales = 130 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q2", Make = "Toyota", Region = "Africa", Sales = 131 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q3", Make = "Toyota", Region = "Africa", Sales = 132 }); 
            data.Add(new MyObject() { Year = 2008, Quarter = "Q4", Make = "Toyota", Region = "Africa", Sales = 133 }); 
 
            return data; 
        } 
    } 
 
    public class MyObject 
    { 
        public string Make 
        { 
            get
            set
        } 
 
        public string Quarter 
        { 
            get
            set
        } 
 
        public int Year 
        { 
            get
            set
        } 
 
        public string Region 
        { 
            get
            set
        } 
 
        public decimal Sales 
        { 
            get
            set
        } 
    } 


Thanks Much
~Boots

2 Answers, 1 is accepted

Sort by
0
Accepted
Steve
Telerik team
answered on 12 Nov 2009, 10:13 AM
Hi Boots,

Unfortunately this is an issue that slipped into the Q3 release. We are already working on and we would release a service pack (or an internal build) that resolves the issue tomorrow or earlier next week at latest.

In short the problem appears when the data source is some kind of object array, object list or similar collection of System.Objects but not a specific type. In your case, when a non-enumerable object is used, an object array with only one item is created internally, that unfortunately causes the described behavior.

There are two possible solutions: rollback to the previous version and wait for the fix (end of the week) or use a typed collection like you've done.

Once again please accept our apologies for the temporary inconvenience.

Best wishes,
Steve
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
Boots
Top achievements
Rank 1
answered on 12 Nov 2009, 02:15 PM
Steve,

Thanks for getting back to me so quick. I was just hoping that it wasn't permanent since most of our reports are using ArrayLists.

Thanks again,
~Boots
Tags
General Discussions
Asked by
Boots
Top achievements
Rank 1
Answers by
Steve
Telerik team
Boots
Top achievements
Rank 1
Share this question
or