Dynamic table creation

1 posts, 0 answers
  1. Andrew
    Andrew avatar
    26 posts
    Member since:
    Sep 2011

    Posted 11 Nov 2011 Link to this post

    I guess I'm just lost as to how I can do this if it is even possible. I have my poco that I would like to bind to the datasource of the table. But I can't figure out how to create the table/crosstable layout to look like the attached image. The problem I'm facing is that I may have n approaches with each approach having n lengths. All approaches have the same number of lengths. Example, I have five approaches with 4 lengths each. From there I have a count for each hour for each approach/length.

    Any help on how I can dynamically create the table?

    Robert

    Here is my model:

    public class CrosstabClassificationModel
        {
            public class ApproachModel
            {
                public ApproachModel(List<int> lengthGroups)
                {
                    Lengths = new List<LengthModel>();
                    int prev = 0;
                    foreach(int i in lengthGroups)
                    {
                        Lengths.Add(new LengthModel()
                        {
                            Min = prev,
                            Max = i
                        });
     
                        prev = i + 1;
                    }
                }
     
                public string Name
                {
                    get;
                    set;
                }
     
                public ApproachTypes ApproachType
                {
                    get;
                    set;
                }
     
                public List<LengthModel> Lengths
                {
                    get;
                    private set;
                }
     
                public void Add(int length, DateTime time)
                {
                    foreach(var l in Lengths)
                    {
                        if(length.IsBetween(l.Min, l.Max))
                        {
                            l.Add(time);
                            break;
                        }
                    }
                }
     
                public override string ToString()
                {
                    return Name;
                }
            }
     
            public class LengthModel
            {
                public LengthModel()
                {
                    Events = new List<EventModel>();
                }
     
                public string Title
                {
                    get
                    {
                        if(Max == int.MaxValue)
                            return string.Format("{0} and greater", Min);
                        else
                            return string.Format("{0} - {1}'", Min, Max);
                    }
                }
     
                internal int Min
                {
                    get;
                    set;
                }
     
                internal int Max
                {
                    get;
                    set;
                }
     
                public List<EventModel> Events
                {
                    get;
                    private set;
                }
     
                internal void Add(DateTime time)
                {
                    var @event = Events.FirstOrDefault(x => x.Time == time);
                    if(@event == null)
                    {
                        @event = new EventModel()
                        {
                            Count = 0,
                            Time = time
                        };
                        Events.Add(@event);
                    }
                    @event.Count++;
                }
     
                public override string ToString()
                {
                    return Title;
                }
            }
     
            public class EventModel
            {
                public DateTime Time
                {
                    get;
                    set;
                }
     
                public int Count
                {
                    get;
                    set;
                }
     
                public override string ToString()
                {
                    return Time.ToShortTimeString() + " Total: " + Count.ToString();
                }
            }
     
            public CrosstabClassificationModel()
            {
                Approaches = new List<ApproachModel>();
            }
     
            public DateTime Date
            {
                get;
                set;
            }
     
            public List<ApproachModel> Approaches
            {
                get;
                private set;
            }
     
            public ApproachModel this[string Name]
            {
                get
                {
                    return Approaches.FirstOrDefault(x => x.Name == Name);
                }
            }
     
            public override string ToString()
            {
                return Date.ToShortDateString();
            }
        }
Back to Top