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

Dynamically created tables causing object reference not set to an instance of an object

1 Answer 125 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Anders
Top achievements
Rank 1
Anders asked on 11 Sep 2012, 02:18 PM
Hi
--------------------------
EDIT:
I am really sorry for the long post, tell me if you want it to a pastebin, the problem here after some debugging is that the structure seems ok after going through properties when opening it in debugging mode, the really big problem for me is that I canot get any kind of output from the report telling me what is wrong and why it's thinking there is no report. like some kind of exception catching
--------------------------
I am using the Q2 2010 SP1 4.1 and telerik radcontrols for winforms Q1 2012 SP1 and I just created a report by using some dynamic coding in the report(which is embeded in a winform), at first I copy pasted and edited a lot from some code made in designtime, however as this resulted in ugly (but working) code I created a class to do it for me however it now shows no report, just a message saying "Object reference not set to an instance of an object."

this is my weekreport.cs class containing the definition class for the report, the uglypopulate method is the one which works, the almostpopulatelikeabaws is the new code I created with the help class

using System.Collections.Generic;
using System.Data;
using BE;
 
namespace TimeRegisterClient
{
    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;
    using Telerik.Reporting;
    using Telerik.Reporting.Drawing;
 
    /// <summary>
    /// Summary description for WeekReport.
    /// </summary>
    public partial class TidsRapport : Telerik.Reporting.Report
    {
        private void setEmptyRowStandard(Telerik.Reporting.TextBox RowBox)
        {
            RowBox.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(12D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Value = "";
        }
        private void setTotalRowStandard(Telerik.Reporting.TextBox RowBox)
        {
            RowBox.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Style.BorderWidth.Top = new Telerik.Reporting.Drawing.Unit(1D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Style.BorderStyle.Top = BorderType.Solid;
            RowBox.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(12D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Style.TextAlign = HorizontalAlign.Left;
            RowBox.Style.VerticalAlign = VerticalAlign.Middle;
        }
 
        private void setCustomerRowStandard(Telerik.Reporting.TextBox RowBox)
        {
            RowBox.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(12D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Style.TextAlign = HorizontalAlign.Left;
            RowBox.Style.VerticalAlign = VerticalAlign.Middle;
        }
        private void setDayHeaderStandard(Telerik.Reporting.TextBox RowBox)
        {
            RowBox.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Style.BorderWidth.Bottom = new Telerik.Reporting.Drawing.Unit(1D, Telerik.Reporting.Drawing.UnitType.Point); ;
            RowBox.Style.BorderStyle.Bottom = BorderType.Solid;
            RowBox.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(12D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Style.VerticalAlign = VerticalAlign.Middle;
        }
        private void setColumnStandard(Telerik.Reporting.TextBox RowBox,Unit height)
        {
            RowBox.Style.Font.Underline = true;
            RowBox.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(14D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
            RowBox.Style.VerticalAlign = Telerik.Reporting.Drawing.VerticalAlign.Middle;
            RowBox.Size = new Telerik.Reporting.Drawing.SizeU(new Telerik.Reporting.Drawing.Unit(2.4999997615814209D, Telerik.Reporting.Drawing.UnitType.Cm),height);
        }
        public TidsRapport(Dictionary<DayOfWeek, Dictionary<int, UpdCus>> values, UserDetail user, DateTime from, DateTime to)
            : this()
        {
            FromTime = from;
            ToTime = to;
            WriteDate();
            TxtFraBruger.Value += user.Name;
             
            populatealmostlikeabaws(values);
           //uglypopulate(values);
            
            
             
 
        }
        #region new
        private void populatealmostlikeabaws(Dictionary<DayOfWeek, Dictionary<int, UpdCus>> values)
        {
            PointU l =
                new PointU(
                    new Unit(0.299999862909317D, UnitType.Cm),
                    new Unit(4.5999999046325684D, UnitType.Cm));
            SizeU s = new Telerik.Reporting.Drawing.SizeU(new Telerik.Reporting.Drawing.Unit(12.600000381469727D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(2.4000000953674316D, Telerik.Reporting.Drawing.UnitType.Cm));
            ReportTableGenerator tg = new ReportTableGenerator(s, l, new Telerik.Reporting.Drawing.Unit(0.6D, Telerik.Reporting.Drawing.UnitType.Cm));
 
            setColumnStandard(tg.Nextbox, tg.DefaultRowHeight);
            tg.Nextbox.Style.TextAlign = Telerik.Reporting.Drawing.HorizontalAlign.Left;
            tg.Nextbox.Value = "Dag/Kunde";
            tg.addColumn(new Telerik.Reporting.Drawing.Unit(10.09999942779541D, Telerik.Reporting.Drawing.UnitType.Cm));
 
            setColumnStandard(tg.Nextbox, tg.DefaultRowHeight);
            tg.Nextbox.Style.TextAlign = Telerik.Reporting.Drawing.HorizontalAlign.Center;
            tg.Nextbox.Value = "Tider";
            tg.addColumn(new Telerik.Reporting.Drawing.Unit(2.4999997615814209D, Telerik.Reporting.Drawing.UnitType.Cm));
 
            tg.DefaultRowHeight = new Telerik.Reporting.Drawing.Unit(0.5D, Telerik.Reporting.Drawing.UnitType.Cm);
            Dictionary<int, UpdCus> total = new Dictionary<int, UpdCus>();
            DayOfWeek DayOfWork = FromTime.DayOfWeek;
 
            for (int i = 0; i < (values.Keys.Count + 1); i++)
            {
                Boolean notlast = i < values.Keys.Count;
 
                setDayHeaderStandard(tg.Nextbox);
                tg.Nextbox.Style.TextAlign = HorizontalAlign.Left;
                tg.Nextbox.Style.Padding.Left = new Unit(1.5, UnitType.Cm);
                tg.Nextbox.Style.Font.Bold = true;
 
                if (notlast)
                    tg.Nextbox.Value = DayOfWork.ToString();
                else
                    tg.Nextbox.Value = "Samlet tid";
 
                tg.addRowCell();
 
                setDayHeaderStandard(tg.Nextbox);
                tg.Nextbox.Style.TextAlign = Telerik.Reporting.Drawing.HorizontalAlign.Center;
                tg.addRowCell();
 
                tg.appendRow();
 
                Decimal weekHours = 0;
                #region Customer Times loop
 
                Dictionary<int, UpdCus> temp;
                if (notlast)
                    temp = values[DayOfWork];
                else
                    temp = total;
                foreach (UpdCus c in temp.Values)
                {
                    if (notlast)
                    {
                        if (!total.ContainsKey(c.CustomerId))
                        {
                            total.Add(c.CustomerId, c);
                        }
                        else
                        {
                            total[c.CustomerId].update.TimeSpent += c.update.TimeSpent;
                        }
                    }
 
 
 
                    setCustomerRowStandard(tg.Nextbox);
                    tg.Nextbox.Style.Padding.Left = new Unit(2.5, UnitType.Cm);
                    tg.Nextbox.Value = c.CustomerName;
 
                    tg.addRowCell();
                    setCustomerRowStandard(tg.Nextbox);
                    tg.Nextbox.Value = c.update.TimeSpent.ToString();
 
                    tg.addRowCell();
                    tg.appendRow();
 
                    weekHours += c.update.TimeSpent;
                }
                #endregion
                #region Total Row add
 
 
                setTotalRowStandard(tg.Nextbox);
 
                tg.Nextbox.Style.Padding.Left = new Unit(2.5, UnitType.Cm);
                tg.Nextbox.Value = "total tid registreret " + (notlast ? DayOfWork + "" : "I alt");
                tg.addRowCell();
                setTotalRowStandard(tg.Nextbox);
                tg.Nextbox.Value = weekHours + "";
                tg.addRowCell();
                tg.appendRow();
                #endregion
 
                #region empty row add
                if (notlast)
                {
                    setEmptyRowStandard(tg.Nextbox);
                    tg.addRowCell();
                    setEmptyRowStandard(tg.Nextbox);
                    tg.addRowCell();
                    tg.appendRow();
 
 
                }
                #endregion
 
                DayOfWork++;
            }
            tg.finishTable();
            DetailSection.Items.Add(tg.table);
        }
        #endregion
 
        #region old
        private void uglypopulate(Dictionary<DayOfWeek, Dictionary<int, UpdCus>> values)
        {
 
            Telerik.Reporting.Table DataTable;
            List<Telerik.Reporting.ReportItemBase> tableItems = new List<ReportItemBase>();
            Telerik.Reporting.TextBox FirstDay = new Telerik.Reporting.TextBox();
            Telerik.Reporting.TextBox empty = new Telerik.Reporting.TextBox();
            DataTable = new Telerik.Reporting.Table();
            DetailSection.Items.Add(DataTable);
            Telerik.Reporting.TextBox TextHeader;
            Telerik.Reporting.TextBox HourHeader;
            Telerik.Reporting.TableGroup tableGroup1 = new Telerik.Reporting.TableGroup();
            Telerik.Reporting.TableGroup tableGroup2 = new Telerik.Reporting.TableGroup();
            Telerik.Reporting.TableGroup tableGroup3 = new Telerik.Reporting.TableGroup();
 
 
            TextHeader = new Telerik.Reporting.TextBox();
            HourHeader = new Telerik.Reporting.TextBox();
 
            TextHeader = new Telerik.Reporting.TextBox();
            HourHeader = new Telerik.Reporting.TextBox();
            DataTable.Body.Columns.Add(new Telerik.Reporting.TableBodyColumn(new Telerik.Reporting.Drawing.Unit(10.09999942779541D, Telerik.Reporting.Drawing.UnitType.Cm)));
            DataTable.Body.Columns.Add(new Telerik.Reporting.TableBodyColumn(new Telerik.Reporting.Drawing.Unit(2.4999997615814209D, Telerik.Reporting.Drawing.UnitType.Cm)));
            DataTable.Body.Rows.Add(new Telerik.Reporting.TableBodyRow(new Telerik.Reporting.Drawing.Unit(0.6D, Telerik.Reporting.Drawing.UnitType.Cm)));
            DataTable.Body.SetCellContent(0, 0, FirstDay);
            DataTable.Body.SetCellContent(0, 1, empty);
            tableGroup1.ReportItem = TextHeader;
            tableGroup2.ReportItem = HourHeader;
            DataTable.ColumnGroups.Add(tableGroup1);
            DataTable.ColumnGroups.Add(tableGroup2);
            tableItems.AddRange(new Telerik.Reporting.ReportItemBase[] {
            FirstDay,
            empty,
            TextHeader,
            HourHeader});
            DataTable.Location = new Telerik.Reporting.Drawing.PointU(new Telerik.Reporting.Drawing.Unit(0.299999862909317D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(4.5999999046325684D, Telerik.Reporting.Drawing.UnitType.Cm));
            DataTable.Name = "DataTable";
 
            DataTable.Size = new Telerik.Reporting.Drawing.SizeU(new Telerik.Reporting.Drawing.Unit(12.600000381469727D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(2.4000000953674316D, Telerik.Reporting.Drawing.UnitType.Cm));
 
 
            TextHeader.Name = "TextHeader";
            TextHeader.Size = new Telerik.Reporting.Drawing.SizeU(new Telerik.Reporting.Drawing.Unit(10.09999942779541D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(0.6D, Telerik.Reporting.Drawing.UnitType.Cm));
            TextHeader.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
 
 
            TextHeader.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(14D, Telerik.Reporting.Drawing.UnitType.Point);
            TextHeader.Style.Font.Underline = true;
            TextHeader.Style.TextAlign = Telerik.Reporting.Drawing.HorizontalAlign.Left;
            TextHeader.Style.VerticalAlign = Telerik.Reporting.Drawing.VerticalAlign.Middle;
            TextHeader.Value = "Dag/Kunde";
 
            HourHeader.Name = "HourHeader";
            HourHeader.Size = new Telerik.Reporting.Drawing.SizeU(new Telerik.Reporting.Drawing.Unit(2.4999997615814209D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(0.6D, Telerik.Reporting.Drawing.UnitType.Cm));
            HourHeader.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
 
            HourHeader.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(14D, Telerik.Reporting.Drawing.UnitType.Point);
            HourHeader.Style.Font.Underline = true;
            HourHeader.Style.TextAlign = Telerik.Reporting.Drawing.HorizontalAlign.Center;
            HourHeader.Style.VerticalAlign = Telerik.Reporting.Drawing.VerticalAlign.Middle;
            HourHeader.Value = "Tider";
            Boolean made = true;
            int row = 1;
            Dictionary<int, UpdCus> total = new Dictionary<int, UpdCus>();
            DayOfWeek DayOfWork = FromTime.DayOfWeek;
            for (int i = 0; i < (values.Keys.Count + 1); i++)
            {
                Boolean notlast = i < values.Keys.Count;
                if (made)
                {
                    made = false;
                }
                else
                {
                    DataTable.Body.Rows.Add(new Telerik.Reporting.TableBodyRow(new Telerik.Reporting.Drawing.Unit(0.6D, Telerik.Reporting.Drawing.UnitType.Cm)));
                    FirstDay = new Telerik.Reporting.TextBox();
                    empty = new Telerik.Reporting.TextBox();
                    DataTable.Body.SetCellContent(row, 0, FirstDay);
                    DataTable.Body.SetCellContent(row, 1, empty);
                    row++;
                    tableItems.AddRange(new Telerik.Reporting.ReportItemBase[] {
            FirstDay,
            empty});
 
                }
                TableGroup t = new TableGroup();
                tableGroup3.ChildGroups.Add(t);
                FirstDay.Name = DayOfWork.ToString();
                //FirstDay.Size = new SizeU(new Unit(10.09999942779541D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(0.6D, Telerik.Reporting.Drawing.UnitType.Cm));
                FirstDay.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
                FirstDay.Style.BorderWidth.Bottom = new Telerik.Reporting.Drawing.Unit(1D, Telerik.Reporting.Drawing.UnitType.Point); ;
                FirstDay.Style.BorderStyle.Bottom = BorderType.Solid;
                FirstDay.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(12D, Telerik.Reporting.Drawing.UnitType.Point);
                FirstDay.Style.TextAlign = HorizontalAlign.Left;
                FirstDay.Style.VerticalAlign = VerticalAlign.Middle;
                FirstDay.Style.Padding.Left = new Unit(1.5, UnitType.Cm);
 
                FirstDay.Style.Font.Bold = true;
                if (notlast)
                    FirstDay.Value = DayOfWork.ToString();
                else
                    FirstDay.Value = "Samlet tid";
 
 
 
 
                // empty.Size = new Telerik.Reporting.Drawing.SizeU(new Telerik.Reporting.Drawing.Unit(2.4999997615814209D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(0.6D, Telerik.Reporting.Drawing.UnitType.Cm));
                empty.Style.TextAlign = Telerik.Reporting.Drawing.HorizontalAlign.Center;
                empty.Style.VerticalAlign = Telerik.Reporting.Drawing.VerticalAlign.Middle;
                empty.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
                empty.Style.BorderWidth.Bottom = new Telerik.Reporting.Drawing.Unit(1D, Telerik.Reporting.Drawing.UnitType.Point);
                empty.Style.BorderStyle.Bottom = BorderType.Solid;
                empty.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(12D, Telerik.Reporting.Drawing.UnitType.Point);
                Decimal weekHours = 0;
                #region Customer Times loop
 
                Dictionary<int, UpdCus> temp;
                if (notlast)
                    temp = values[DayOfWork];
                else
                    temp = total;
                foreach (UpdCus c in temp.Values)
                {
                    if (notlast)
                    {
                        if (!total.ContainsKey(c.CustomerId))
                        {
                            total.Add(c.CustomerId, c);
                        }
                        else
                        {
                            total[c.CustomerId].update.TimeSpent += c.update.TimeSpent;
                        }
                    }
                    DataTable.Body.Rows.Add(new Telerik.Reporting.TableBodyRow(new Telerik.Reporting.Drawing.Unit(0.5D, Telerik.Reporting.Drawing.UnitType.Cm)));
                    Telerik.Reporting.TextBox Customer = new Telerik.Reporting.TextBox();
                    Telerik.Reporting.TextBox Time = new Telerik.Reporting.TextBox();
                    empty.Name = DayOfWork.ToString() + "e";
                    DataTable.Body.SetCellContent(row, 0, Customer);
                    DataTable.Body.SetCellContent(row, 1, Time);
                    row++;
                    tableItems.AddRange(new Telerik.Reporting.ReportItemBase[] {
            Customer,
            Time});
                    TableGroup t1 = new TableGroup();
                    tableGroup3.ChildGroups.Add(t1);
                    Customer.Name = DayOfWork.ToString() + c.CustomerName;
                    // Customer.Size = new SizeU(new Unit(10.09999942779541D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(0.5D, Telerik.Reporting.Drawing.UnitType.Cm));
                    Customer.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
                    Customer.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(12D, Telerik.Reporting.Drawing.UnitType.Point);
                    Customer.Style.Padding.Left = new Unit(2.5, UnitType.Cm);
                    Customer.Style.TextAlign = HorizontalAlign.Left;
                    Customer.Style.VerticalAlign = VerticalAlign.Middle;
                    Customer.Value = c.CustomerName;
                    //Console.WriteLine(c.CustomerName + ": " + c.update.TimeSpent);
                    //TableGroup n = new TableGroup();
                    // n.Grouping.Add(c.CustomerName);
                    // DataTable.RowGroups.Add(n);
                    Time.Name = DayOfWork.ToString() + "T";
                    Time.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
                    //Time.Size = new Telerik.Reporting.Drawing.SizeU(new Telerik.Reporting.Drawing.Unit(2.4999997615814209D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(0.5D, Telerik.Reporting.Drawing.UnitType.Cm));
                    Time.Style.TextAlign = Telerik.Reporting.Drawing.HorizontalAlign.Left;
                    Time.Style.VerticalAlign = Telerik.Reporting.Drawing.VerticalAlign.Middle;
                    Time.Value = c.update.TimeSpent.ToString();
                    weekHours += c.update.TimeSpent;
                }
                #endregion
                #region Total Row add
 
                DataTable.Body.Rows.Add(new Telerik.Reporting.TableBodyRow(new Telerik.Reporting.Drawing.Unit(0.5D, Telerik.Reporting.Drawing.UnitType.Cm)));
                Telerik.Reporting.TextBox CustomerTotal = new Telerik.Reporting.TextBox();
                Telerik.Reporting.TextBox TimeTotal = new Telerik.Reporting.TextBox(); empty.Name = DayOfWork.ToString() + "e";
                DataTable.Body.SetCellContent(row, 0, CustomerTotal);
                DataTable.Body.SetCellContent(row, 1, TimeTotal);
                row++;
                tableItems.AddRange(new Telerik.Reporting.ReportItemBase[] {
            CustomerTotal,
            TimeTotal});
                TableGroup t2 = new TableGroup();
                tableGroup3.ChildGroups.Add(t2);
                CustomerTotal.Name = DayOfWork.ToString() + "TotalDescription" + notlast;
                //CustomerTotal.Size = new SizeU(new Unit(10.09999942779541D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(0.5D, Telerik.Reporting.Drawing.UnitType.Cm));
                CustomerTotal.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
                CustomerTotal.Style.BorderWidth.Top = new Telerik.Reporting.Drawing.Unit(1D, Telerik.Reporting.Drawing.UnitType.Point);
                CustomerTotal.Style.BorderStyle.Top = BorderType.Solid;
 
                CustomerTotal.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(12D, Telerik.Reporting.Drawing.UnitType.Point);
                CustomerTotal.Style.Padding.Left = new Unit(2.5, UnitType.Cm);
                CustomerTotal.Style.TextAlign = HorizontalAlign.Left;
                CustomerTotal.Style.VerticalAlign = VerticalAlign.Middle;
                CustomerTotal.Value = "total tid registreret " + (notlast ? DayOfWork + "" : "I alt");
 
                TimeTotal.Name = DayOfWork.ToString() + "TotalTimeTotal" + notlast;
                //TimeTotal.Size = new Telerik.Reporting.Drawing.SizeU(new Telerik.Reporting.Drawing.Unit(2.4999997615814209D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(0.5D, Telerik.Reporting.Drawing.UnitType.Cm));
                TimeTotal.Style.TextAlign = Telerik.Reporting.Drawing.HorizontalAlign.Left;
                TimeTotal.Style.VerticalAlign = Telerik.Reporting.Drawing.VerticalAlign.Middle;
                TimeTotal.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
                TimeTotal.Style.BorderWidth.Top = new Telerik.Reporting.Drawing.Unit(1D, Telerik.Reporting.Drawing.UnitType.Point);
                TimeTotal.Style.BorderStyle.Top = BorderType.Solid;
                TimeTotal.Value = weekHours + "";
                #endregion
 
                #region empty row add
                if (notlast)
                {
                    DataTable.Body.Rows.Add(new Telerik.Reporting.TableBodyRow(new Telerik.Reporting.Drawing.Unit(0.5D, Telerik.Reporting.Drawing.UnitType.Cm)));
                    Telerik.Reporting.TextBox CustomerEmpty = new Telerik.Reporting.TextBox();
                    Telerik.Reporting.TextBox TimeEmpty = new Telerik.Reporting.TextBox(); empty.Name = DayOfWork.ToString() + "e";
                    DataTable.Body.SetCellContent(row, 0, CustomerEmpty);
                    DataTable.Body.SetCellContent(row, 1, TimeEmpty);
                    row++;
                    tableItems.AddRange(new Telerik.Reporting.ReportItemBase[] {
            CustomerEmpty,
            TimeEmpty});
                    TableGroup t3 = new TableGroup();
                    tableGroup3.ChildGroups.Add(t3);
                    CustomerEmpty.Name = DayOfWork.ToString() + "dEmpty";
                    // CustomerEmpty.Size = new SizeU(new Unit(10.09999942779541D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(0.5D, Telerik.Reporting.Drawing.UnitType.Cm));
                    CustomerEmpty.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
 
                    CustomerEmpty.Style.Font.Size = new Telerik.Reporting.Drawing.Unit(12D, Telerik.Reporting.Drawing.UnitType.Point);
                    CustomerEmpty.Style.Padding.Left = new Unit(2.5, UnitType.Cm);
                    CustomerEmpty.Style.TextAlign = HorizontalAlign.Left;
                    CustomerEmpty.Style.VerticalAlign = VerticalAlign.Bottom;
                    CustomerEmpty.Value = "";
 
                    TimeEmpty.Name = DayOfWork.ToString() + "EmptyTime";
                    //TimeEmpty.Size = new Telerik.Reporting.Drawing.SizeU(new Telerik.Reporting.Drawing.Unit(2.4999997615814209D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(0.5D, Telerik.Reporting.Drawing.UnitType.Cm));
                    TimeEmpty.Style.TextAlign = Telerik.Reporting.Drawing.HorizontalAlign.Left;
                    TimeEmpty.Style.VerticalAlign = Telerik.Reporting.Drawing.VerticalAlign.Bottom;
                    TimeEmpty.Style.BorderWidth.Default = new Telerik.Reporting.Drawing.Unit(0D, Telerik.Reporting.Drawing.UnitType.Point);
 
                    TimeEmpty.Value = "";
                }
                #endregion
 
                DayOfWork++;
            }
            DataTable.Items.AddRange(tableItems.ToArray());
 
            DataTable.RowGroups.Add(tableGroup3);
            tableGroup3.Grouping.AddRange(new Telerik.Reporting.Data.Grouping[] {
            new Telerik.Reporting.Data.Grouping("")});
            tableGroup3.Name = "DetailGroup";
        }
 
            #endregion
 
        public TidsRapport()
        {
            InitializeComponent();
 
        }
 
        private void WriteDate()
        {
 
 
            TitleTextBox.Value += FromTime.ToShortDateString() + " til " + ToTime;
 
            TitleTextBox.Width += TitleTextBox.Width + new Unit(8.0, UnitType.Cm);
 
        }
 
        protected DateTime FromTime { get; set; }
 
        protected DateTime ToTime { get; set; }
    }
 
}

And this is the helper class

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using Telerik.Reporting;
using Telerik.Reporting.Data;
using Telerik.Reporting.Drawing;
 
namespace TimeRegisterClient
{
    class ReportTableGenerator
    {
        public int CurrentRow { get; private set; }
        public int CurrentColumn { get; private set; }
        public int MaxColumns { get; private set; }
         
        public TextBox Nextbox { get; set; }
        private List<TextBox> nextRow { get; set; }
        private Table GeneratedTable;
        public Table table
        {
            get
            {
                if (isFinished)
                    return GeneratedTable;
                return null;
            }
            private set { GeneratedTable = value; }
        }
        public Boolean isFinished { get; private set; }
        public Boolean ColumnsSet { get; set; }
        private List<ReportItemBase> tableItems { get; set; }
        public Unit DefaultRowHeight { get; set; }
        public ReportTableGenerator(Unit colHeight)
        {
            ColumnsSet = false;
            CurrentColumn = 0;
            CurrentRow = 0;
            MaxColumns = 0;
            DefaultRowHeight = new TextBox().Size.Height;
            RowGroup = new TableGroup();
            tableItems = new List<ReportItemBase>();
            GeneratedTable = new Table();
            //GeneratedTable.Body.Rows.Add(new TableBodyRow(colHeight));
            resetRow();
            resetBoxes();
            GeneratedTable.Name = "GeneratedTable";
        }
        public ReportTableGenerator( SizeU size,PointU location,Unit columnheight):this(columnheight)
       {
           setDimensions(size,location);
       }
         
        public void finishTable()
        {
            GeneratedTable.Items.AddRange(tableItems.ToArray());
            GeneratedTable.RowGroups.Add(RowGroup);
            RowGroup.Grouping.AddRange(new Grouping[]
                                           {
                                            new Grouping("")
                                           });
            RowGroup.Name = "DetailGroup";
            isFinished = true;
        }
 
        private void resetRow()
        {
            nextRow=new List<TextBox>();
        }
 
         
 
        public void resetBoxes()
        {
            Nextbox = new TextBox();
        }
        
        public void setDimensions(SizeU size, PointU location)
        {
            GeneratedTable.Location = location;
            GeneratedTable.Size = size;
        }
        
        public void addRowCell()
        {
            nextRow.Add(Nextbox);
            resetBoxes();
        }
 
         
 
        public void appendRow()
        {
            int dif = nextRow.Count - (MaxColumns+1);
            if (dif > 0)
                throw new Exception("you added " + dif + " more cells to a row than possible");
            if (!ColumnsSet)
            {
                ColumnsSet = true;
                completeColumns();
            }
            GeneratedTable.Body.Rows.Add(new TableBodyRow(DefaultRowHeight));
            TableGroup newGroup = new TableGroup();
            RowGroup.ChildGroups.Add(newGroup);
            foreach (TextBox t in nextRow)
            {
                if (t.Name.Equals(""))
                    t.Name = CurrentRow + "," + CurrentColumn;
                addCell(t);
            }
            resetRow();
        }
        
        private void addCell(TextBox t)
        {
            GeneratedTable.Body.SetCellContent(CurrentRow,CurrentColumn,t);
            iterateCell();
            tableItems.Add(t);
        }
 
        public void addColumn(Unit Width)
        {
            if(ColumnsSet)
                throw new Exception("You cannot add anymore columns at the given time");
            GeneratedTable.Body.Columns.Add(new TableBodyColumn(Width));
            TableGroup cgroup = new TableGroup();
            MaxColumns++;
             
            cgroup.ReportItem = Nextbox;
            GeneratedTable.ColumnGroups.Add(cgroup);
            addCell(Nextbox);
            resetBoxes();
        }
 
        
        private void completeColumns()
        {
            MaxColumns--;
            iterateCell();
        }
        private void iterateCell()
        {
            if (CurrentColumn >= MaxColumns)
            {
                CurrentColumn = 0;
                CurrentRow++;
            }
            else
            {
                CurrentColumn++;
            }
        }
 
        private TableGroup RowGroup { get; set; }
 
         
    }
}

I also attached a picture of how the report looks once generated, I removed the names of the customers though hope you don't mind

any help is appreciated :)

Update:
I tried adding this code block just to test if it was the generator class or the code using it that was the problem, and it's the generatorclass. This is the code I used to show one row with and I still got the problem
PointU l =
                  new PointU(
                      new Unit(0.299999862909317D, UnitType.Cm),
                      new Unit(4.5999999046325684D, UnitType.Cm));
            SizeU s = new Telerik.Reporting.Drawing.SizeU(new Telerik.Reporting.Drawing.Unit(12.600000381469727D, Telerik.Reporting.Drawing.UnitType.Cm), new Telerik.Reporting.Drawing.Unit(2.4000000953674316D, Telerik.Reporting.Drawing.UnitType.Cm));
            ReportTableGenerator rg = new ReportTableGenerator(s, l, new Telerik.Reporting.Drawing.Unit(0.6D, Telerik.Reporting.Drawing.UnitType.Cm));
            rg.Nextbox.Value = "ctest1";
            rg.addColumn(new Unit(0.6D, UnitType.Cm));
            rg.Nextbox.Value = "ctest2";
            rg.addColumn(new Unit(0.6D, UnitType.Cm));
            rg.Nextbox.Value = "row1";
            rg.addRowCell();
            rg.Nextbox.Value = "row12";
            rg.appendRow();
            rg.finishTable();
            DetailSection.Items.Add(rg.table);

1 Answer, 1 is accepted

Sort by
0
Anders
Top achievements
Rank 1
answered on 13 Sep 2012, 09:29 AM
bump, need help on this :) easier for me to work with than the designer and I figured some might want the code for this generator class but fixed hehe :)
Tags
General Discussions
Asked by
Anders
Top achievements
Rank 1
Answers by
Anders
Top achievements
Rank 1
Share this question
or