<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://forums.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Custom Server Controls</title><link>http://forums.asp.net/19.aspx</link><description>All about building ASP.NET server controls. &lt;a href="http://aspadvice.com/SignUp/list.aspx?l=12&amp;c=17" target="_blank"&gt;Email List&lt;/a&gt;</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Re: Custom Databound Control Losing Data on Postback</title><link>http://forums.asp.net/thread/2572045.aspx</link><pubDate>Thu, 21 Aug 2008 14:32:05 GMT</pubDate><guid isPermaLink="false">4c671506-2930-414c-a40b-8bf57ded5924:2572045</guid><dc:creator>pawicks</dc:creator><slash:comments>0</slash:comments><comments>http://forums.asp.net/thread/2572045.aspx</comments><wfw:commentRss>http://forums.asp.net/commentrss.aspx?SectionID=19&amp;PostID=2572045</wfw:commentRss><description>&lt;p&gt;&amp;nbsp;And here it is: http://forums.asp.net/t/1307741.aspx&lt;/p&gt;&lt;p&gt;I was able to work with another forum member to get this issue resolved.&amp;nbsp; It&amp;#39;s now a Composite Control but works wonderfully. &lt;br /&gt;&lt;/p&gt;</description></item><item><title>Re: Custom Databound Control Losing Data on Postback</title><link>http://forums.asp.net/thread/2568811.aspx</link><pubDate>Wed, 20 Aug 2008 11:27:11 GMT</pubDate><guid isPermaLink="false">4c671506-2930-414c-a40b-8bf57ded5924:2568811</guid><dc:creator>deblendewim</dc:creator><slash:comments>0</slash:comments><comments>http://forums.asp.net/thread/2568811.aspx</comments><wfw:commentRss>http://forums.asp.net/commentrss.aspx?SectionID=19&amp;PostID=2568811</wfw:commentRss><description>&lt;p&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="/Themes/fan/images/icon-quote.gif"&gt; &lt;strong&gt;pawicks:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt; I made a seperate post however since the issue is different.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;
&lt;p&gt;Great Peter!&lt;/p&gt;
&lt;p&gt;That&amp;#39;s the way to get the most out of this forum. &lt;/p&gt;
&lt;p&gt;You could however always post the link of the new thread in this thread.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Good luck!&lt;br /&gt;Wim&lt;/p&gt;</description></item><item><title>Re: Custom Databound Control Losing Data on Postback</title><link>http://forums.asp.net/thread/2567438.aspx</link><pubDate>Tue, 19 Aug 2008 17:56:58 GMT</pubDate><guid isPermaLink="false">4c671506-2930-414c-a40b-8bf57ded5924:2567438</guid><dc:creator>pawicks</dc:creator><slash:comments>0</slash:comments><comments>http://forums.asp.net/thread/2567438.aspx</comments><wfw:commentRss>http://forums.asp.net/commentrss.aspx?SectionID=19&amp;PostID=2567438</wfw:commentRss><description>&lt;p&gt;&amp;nbsp;Thanks for the link, that helped allot. Learned lots of new stuff too.&amp;nbsp; Problem now is the Control WON&amp;#39;T Lose It&amp;#39;s State when I try to make it.&amp;nbsp; I made a seperate post however since the issue is different.&lt;/p&gt;&lt;p&gt;&amp;nbsp;What I did to fix my issue:&lt;/p&gt;&lt;p&gt;I made it so that the control is dynamically added on every page load during the PageLoad event.&amp;nbsp; During the controls OnInit event it builds itself from the data the page passes in.&amp;nbsp; After this the State is automatically loaded and works perfectly.&amp;nbsp; I had tried rebuilding the Control Tree before but had not been able to duplicate it properly enough for it to work.&lt;/p&gt;&lt;p&gt;Thanks,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; --Peter &lt;br /&gt;&lt;/p&gt;</description></item><item><title>Re: Custom Databound Control Losing Data on Postback</title><link>http://forums.asp.net/thread/2566799.aspx</link><pubDate>Tue, 19 Aug 2008 13:48:30 GMT</pubDate><guid isPermaLink="false">4c671506-2930-414c-a40b-8bf57ded5924:2566799</guid><dc:creator>deblendewim</dc:creator><slash:comments>0</slash:comments><comments>http://forums.asp.net/thread/2566799.aspx</comments><wfw:commentRss>http://forums.asp.net/commentrss.aspx?SectionID=19&amp;PostID=2566799</wfw:commentRss><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Sorry I don&amp;#39;t have time to look into your code. &lt;/p&gt;
&lt;p&gt;I had a problem once with losing state. It all had to do with saving the state in the wrong time in the life cycle of the page. Maybe this is happening to you too!?&lt;/p&gt;
&lt;p&gt;Here I found some info about ViewState which helped me to understand it better. &lt;a href="http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx"&gt;http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If the problem still occurs, you should try to make a small demo website, and in that demo you build your custom control from scratch up. &lt;br /&gt;This way it is easier to track down the possible error. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;br /&gt;Wim&lt;/p&gt;</description></item><item><title>Custom Databound Control Losing Data on Postback</title><link>http://forums.asp.net/thread/2565303.aspx</link><pubDate>Mon, 18 Aug 2008 23:10:43 GMT</pubDate><guid isPermaLink="false">4c671506-2930-414c-a40b-8bf57ded5924:2565303</guid><dc:creator>pawicks</dc:creator><slash:comments>0</slash:comments><comments>http://forums.asp.net/thread/2565303.aspx</comments><wfw:commentRss>http://forums.asp.net/commentrss.aspx?SectionID=19&amp;PostID=2565303</wfw:commentRss><description>&lt;p&gt;I have a custom Data Bound control that I am building. But on postback I lose the all state and I can&amp;#39;t figure out why state isn&amp;#39;t coming back.&lt;/p&gt;&lt;p&gt;This control presents a list of tasks in the left pane, this is my &amp;quot;frozen&amp;quot; pane. On the right is a panel with a scrollbar.&amp;nbsp; Across the top is a header with a column for each day in the selected date range.&amp;nbsp; Then for each Task per day there is another control, derived from the textbox, where the user can enter in data.&amp;nbsp; Currently no saving of this data is being attempted, one step at a time.&lt;/p&gt;&lt;p&gt;&amp;nbsp;I am re-generating the controls that are supposed to be there, as you will see in the code, but they always just come out empty.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Any help would be greatly appreciated.&lt;/p&gt;&lt;p&gt;--Peter &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Code (better to much then not enough):&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;pre class="coloredcode"&gt;&lt;span class="kwd"&gt;Public Class&lt;/span&gt; EstimatedDoseDisplayer&lt;br /&gt;    &lt;span class="kwd"&gt;Inherits&lt;/span&gt; System.Web.UI.WebControls.DataBoundControl&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Public Property&lt;/span&gt; StartDate() &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime&lt;br /&gt;        &lt;span class="kwd"&gt;Get&lt;br /&gt;            Dim&lt;/span&gt; o &lt;span class="kwd"&gt;As Object&lt;/span&gt; = ViewState(&lt;span class="st"&gt;&amp;quot;StartDate&amp;quot;&lt;/span&gt;)&lt;br /&gt;            &lt;span class="kwd"&gt;If&lt;/span&gt; o &lt;span class="kwd"&gt;Is Nothing Then&lt;br /&gt;                Return&lt;/span&gt; DateTime.MinValue&lt;br /&gt;            &lt;span class="kwd"&gt;Else&lt;br /&gt;                Return&lt;/span&gt; Convert.ToDateTime(o)&lt;br /&gt;            &lt;span class="kwd"&gt;End If&lt;br /&gt;        End Get&lt;br /&gt;        Set&lt;/span&gt;(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime)&lt;br /&gt;            ViewState(&lt;span class="st"&gt;&amp;quot;StartDate&amp;quot;&lt;/span&gt;) = value&lt;br /&gt;            &lt;span class="kwd"&gt;If&lt;/span&gt; (Initialized) &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;                OnDataPropertyChanged()&lt;br /&gt;            &lt;span class="kwd"&gt;End If&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;    Public Property&lt;/span&gt; EndDate() &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime&lt;br /&gt;        &lt;span class="kwd"&gt;Get&lt;br /&gt;            Dim&lt;/span&gt; o &lt;span class="kwd"&gt;As Object&lt;/span&gt; = ViewState(&lt;span class="st"&gt;&amp;quot;EndDate&amp;quot;&lt;/span&gt;)&lt;br /&gt;            &lt;span class="kwd"&gt;If&lt;/span&gt; o &lt;span class="kwd"&gt;Is Nothing Then&lt;br /&gt;                Return&lt;/span&gt; DateTime.MinValue&lt;br /&gt;            &lt;span class="kwd"&gt;Else&lt;br /&gt;                Return&lt;/span&gt; Convert.ToDateTime(o)&lt;br /&gt;            &lt;span class="kwd"&gt;End If&lt;br /&gt;        End Get&lt;br /&gt;        Set&lt;/span&gt;(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime)&lt;br /&gt;            ViewState(&lt;span class="st"&gt;&amp;quot;EndDate&amp;quot;&lt;/span&gt;) = value&lt;br /&gt;            &lt;span class="kwd"&gt;If&lt;/span&gt; (Initialized) &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;                OnDataPropertyChanged()&lt;br /&gt;            &lt;span class="kwd"&gt;End If&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="cmt"&gt;&amp;#39;Master Panel that will surround the two table&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Protected&lt;/span&gt; ParentPanel &lt;span class="kwd"&gt;As&lt;/span&gt; Panel&lt;br /&gt;    &lt;span class="cmt"&gt;&amp;#39;Main Table used for layout&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Protected&lt;/span&gt; LayoutTable &lt;span class="kwd"&gt;As&lt;/span&gt; Table&lt;br /&gt;&lt;br /&gt;    &lt;span class="cmt"&gt;&amp;#39;Row and Cells for layout table&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Protected&lt;/span&gt; LayoutRow &lt;span class="kwd"&gt;As&lt;/span&gt; TableRow&lt;br /&gt;    &lt;span class="kwd"&gt;Protected&lt;/span&gt; TasksCell &lt;span class="kwd"&gt;As&lt;/span&gt; TableCell&lt;br /&gt;    &lt;span class="kwd"&gt;Protected&lt;/span&gt; DatesCell &lt;span class="kwd"&gt;As&lt;/span&gt; TableCell&lt;br /&gt;&lt;br /&gt;    &lt;span class="cmt"&gt;&amp;#39;Main Tasks table&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Protected&lt;/span&gt; TasksTable &lt;span class="kwd"&gt;As&lt;/span&gt; Table&lt;br /&gt;&lt;br /&gt;    &lt;span class="cmt"&gt;&amp;#39;Scrolling Panel that DatesTable goes in&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Protected&lt;/span&gt; DatesPanel &lt;span class="kwd"&gt;As&lt;/span&gt; Panel&lt;br /&gt;&lt;br /&gt;    &lt;span class="cmt"&gt;&amp;#39;Main Dates Table&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Protected&lt;/span&gt; DatesTable &lt;span class="kwd"&gt;As&lt;/span&gt; Table&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Public Sub New&lt;/span&gt;()&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub&lt;/span&gt; PerformSelect()&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39; Call OnDataBinding here if bound to a data source using the&lt;br /&gt;        &amp;#39; DataSource property (instead of a DataSourceID), because the&lt;br /&gt;        &amp;#39; databinding statement is evaluated before the call to GetData.       &lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;If Not&lt;/span&gt; IsBoundUsingDataSourceID &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;            OnDataBinding(EventArgs.Empty)&lt;br /&gt;        &lt;span class="kwd"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39; The GetData method retrieves the DataSourceView object from  &lt;br /&gt;        &amp;#39; the IDataSource associated with the data-bound control.            &lt;/span&gt;&lt;br /&gt;        GetData().&lt;span class="kwd"&gt;Select&lt;/span&gt;(CreateDataSourceSelectArguments(), _&lt;br /&gt;            &lt;span class="kwd"&gt;AddressOf&lt;/span&gt; OnDataSourceViewSelectCallback)&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39; The PerformDataBinding method has completed.&lt;/span&gt;&lt;br /&gt;        RequiresDataBinding = &lt;span class="kwd"&gt;False&lt;/span&gt;&lt;br /&gt;        MarkAsDataBound()&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39; Raise the DataBound event.&lt;/span&gt;&lt;br /&gt;        OnDataBound(EventArgs.Empty)&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;br /&gt;&lt;br /&gt;    Private Sub&lt;/span&gt; OnDataSourceViewSelectCallback(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; retrievedData &lt;span class="kwd"&gt;As&lt;/span&gt; IEnumerable)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39; Call OnDataBinding only if it has not already been &lt;br /&gt;        &amp;#39; called in the PerformSelect method.&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;If&lt;/span&gt; IsBoundUsingDataSourceID &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;            OnDataBinding(EventArgs.Empty)&lt;br /&gt;        &lt;span class="kwd"&gt;End If&lt;/span&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39; The PerformDataBinding method binds the data in the  &lt;br /&gt;        &amp;#39; retrievedData collection to elements of the data-bound control.&lt;/span&gt;&lt;br /&gt;        PerformDataBinding(retrievedData)&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub&lt;/span&gt; PerformDataBinding(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; retrievedData &lt;span class="kwd"&gt;As&lt;/span&gt; IEnumerable)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Ensure child controls have been created&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Me&lt;/span&gt;.EnsureChildControls()&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;MyBase&lt;/span&gt;.PerformDataBinding(retrievedData)&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39; Verify data exists.&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;If Not&lt;/span&gt; retrievedData &lt;span class="kwd"&gt;Is Nothing And Me&lt;/span&gt;.Visible &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;            CreateControlHierarchy(&lt;span class="kwd"&gt;True&lt;/span&gt;, retrievedData)&lt;br /&gt;        &lt;span class="kwd"&gt;End If&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Protected Sub&lt;/span&gt; CreateHeaders(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; StartDate &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime, &lt;span class="kwd"&gt;ByVal&lt;/span&gt; EndDate &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime, &lt;span class="kwd"&gt;ByRef&lt;/span&gt; TasksTable &lt;span class="kwd"&gt;As&lt;/span&gt; Table, &lt;span class="kwd"&gt;ByRef&lt;/span&gt; DatesTable &lt;span class="kwd"&gt;As&lt;/span&gt; Table)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Basic objects to use for table creation&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Dim&lt;/span&gt; tr &lt;span class="kwd"&gt;As&lt;/span&gt; TableRow = &lt;span class="kwd"&gt;Nothing&lt;br /&gt;        Dim&lt;/span&gt; td &lt;span class="kwd"&gt;As&lt;/span&gt; TableCell = &lt;span class="kwd"&gt;Nothing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;--Add in Work Orders Header--&lt;/span&gt;&lt;br /&gt;        tr = &lt;span class="kwd"&gt;New&lt;/span&gt; TableRow()&lt;br /&gt;        td = &lt;span class="kwd"&gt;New&lt;/span&gt; TableCell()&lt;br /&gt;        td.Text = &lt;span class="st"&gt;&amp;quot;Tasks&amp;quot;&lt;/span&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;make &amp;quot;Work Orders&amp;quot; bold&lt;/span&gt;&lt;br /&gt;        td.Style.Add(&lt;span class="st"&gt;&amp;quot;font-weight&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;bold&amp;quot;&lt;/span&gt;)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Add the cell to the row&lt;/span&gt;&lt;br /&gt;        tr.Cells.Add(td)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;add the &amp;quot;header&amp;quot; row to the work orders table&lt;/span&gt;&lt;br /&gt;        TasksTable.Rows.Add(tr)&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;--Add in Dates Header for this month--&lt;br /&gt;        &amp;#39;New table row to hold date cells&lt;/span&gt;&lt;br /&gt;        tr = &lt;span class="kwd"&gt;New&lt;/span&gt; TableRow()&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Used to hold current date&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Dim&lt;/span&gt; CurrentDate &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime = StartDate&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;While we have not passed the end date&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;While&lt;/span&gt; CurrentDate &amp;lt;= EndDate&lt;br /&gt;            td = &lt;span class="kwd"&gt;New&lt;/span&gt; TableCell()&lt;br /&gt;            td.Text = CurrentDate.ToShortDateString()&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Handle Holiday/Weekend coloring/marking&lt;/span&gt;&lt;br /&gt;            HandleSpecialDays(td, CurrentDate)&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Make Date bold&lt;/span&gt;&lt;br /&gt;            td.Style.Add(&lt;span class="st"&gt;&amp;quot;font-weight&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;bold&amp;quot;&lt;/span&gt;)&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Add date to header row&lt;/span&gt;&lt;br /&gt;            tr.Cells.Add(td)&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Increment the date by 1&lt;/span&gt;&lt;br /&gt;            CurrentDate = CurrentDate.AddDays(1)&lt;br /&gt;        &lt;span class="kwd"&gt;End While&lt;/span&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Add in the Dates header&lt;/span&gt;&lt;br /&gt;        DatesTable.Rows.Add(tr)&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;br /&gt;&lt;br /&gt;    Protected Sub&lt;/span&gt; HandleSpecialDays(&lt;span class="kwd"&gt;ByRef&lt;/span&gt; TD &lt;span class="kwd"&gt;As&lt;/span&gt; TableCell, &lt;span class="kwd"&gt;ByVal&lt;/span&gt; SelectedDate &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Later on we will add a Special Days table to the database so we can highlight special days for reporting/etc&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;If&lt;/span&gt; SelectedDate.DayOfWeek = DayOfWeek.Saturday &lt;span class="kwd"&gt;Or&lt;/span&gt; SelectedDate.DayOfWeek = DayOfWeek.Sunday &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;            TD.BackColor = Drawing.Color.LightSkyBlue&lt;br /&gt;            TD.ToolTip = &lt;span class="st"&gt;&amp;quot;Weekend&amp;quot;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;End If&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Protected Sub&lt;/span&gt; AutoGenerateDates(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; Seed &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime)&lt;br /&gt;        StartDate = &lt;span class="kwd"&gt;New&lt;/span&gt; DateTime(Seed.Year, Seed.Month, 1)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;We also need to generate an End Date if this is the case, start with the 28th of the month, then move forward&lt;/span&gt;&lt;br /&gt;        EndDate = &lt;span class="kwd"&gt;New&lt;/span&gt; DateTime(StartDate.Year, StartDate.Month, 28)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;move end date forward until the last day of the month&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;While True&lt;/span&gt;&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;If adding a day will not take us outside of this month then add a day,&lt;br /&gt;            &amp;#39;  else exit the loop and stick with the date we&amp;#39;ve got.&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwd"&gt;If&lt;/span&gt; EndDate.AddDays(1).Month = StartDate.Month &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;                EndDate = EndDate.AddDays(1)&lt;br /&gt;            &lt;span class="kwd"&gt;Else&lt;br /&gt;                Exit While&lt;br /&gt;            End If&lt;br /&gt;        End While&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub&lt;/span&gt; CreateChildControls()&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Clear out old controls&lt;/span&gt;&lt;br /&gt;        Controls.Clear()&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Make all the new controls&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;MyBase&lt;/span&gt;.CreateChildControls()&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Create the Control Hierarchy for the data&lt;br /&gt;        &amp;#39;If the viewstate exists we&amp;#39;ll use that&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;If Not&lt;/span&gt; ViewState(&lt;span class="st"&gt;&amp;quot;ItemCount&amp;quot;&lt;/span&gt;) &lt;span class="kwd"&gt;Is Nothing Then&lt;/span&gt;&lt;br /&gt;            CreateControlHierarchy(&lt;span class="kwd"&gt;False&lt;/span&gt;, &lt;span class="kwd"&gt;Nothing&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwd"&gt;End If&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Protected Sub&lt;/span&gt; CreateControlHierarchy(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; UseDataSource &lt;span class="kwd"&gt;As Boolean&lt;/span&gt;, &lt;span class="kwd"&gt;ByRef&lt;/span&gt; RawData &lt;span class="kwd"&gt;As&lt;/span&gt; IEnumerable(Of Labor))&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Create the Parent Panel&lt;/span&gt;&lt;br /&gt;        ParentPanel = &lt;span class="kwd"&gt;New&lt;/span&gt; Panel()&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Create Layout Table&lt;/span&gt;&lt;br /&gt;        LayoutTable = &lt;span class="kwd"&gt;New&lt;/span&gt; Table()&lt;br /&gt;        LayoutRow = &lt;span class="kwd"&gt;New&lt;/span&gt; TableRow()&lt;br /&gt;        TasksCell = &lt;span class="kwd"&gt;New&lt;/span&gt; TableCell()&lt;br /&gt;        DatesCell = &lt;span class="kwd"&gt;New&lt;/span&gt; TableCell()&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Main Tasks table&lt;/span&gt;&lt;br /&gt;        TasksTable = &lt;span class="kwd"&gt;New&lt;/span&gt; Table()&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Scrolling Panel that DatesTable goes in&lt;/span&gt;&lt;br /&gt;        DatesPanel = &lt;span class="kwd"&gt;New&lt;/span&gt; Panel()&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Main Dates Table&lt;/span&gt;&lt;br /&gt;        DatesTable = &lt;span class="kwd"&gt;New&lt;/span&gt; Table()&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;--Put Controls Together--&amp;#39;&lt;br /&gt;        &amp;#39;Add parent Panel to parent control&lt;/span&gt;&lt;br /&gt;        Controls.Add(ParentPanel)&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Add layout table to ParentPanel&lt;/span&gt;&lt;br /&gt;        ParentPanel.Controls.Add(LayoutTable)&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Add layout row&lt;/span&gt;&lt;br /&gt;        LayoutTable.Rows.Add(LayoutRow)&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Add layout cells&lt;/span&gt;&lt;br /&gt;        LayoutRow.Cells.Add(TasksCell)&lt;br /&gt;        LayoutRow.Cells.Add(DatesCell)&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Load Tasks Table into Parent Panel&lt;/span&gt;&lt;br /&gt;        TasksCell.Controls.Add(TasksTable)&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Load Dates Panel into Parent Panel&lt;/span&gt;&lt;br /&gt;        DatesCell.Controls.Add(DatesPanel)&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Load Dates Table into DatesPanel&lt;/span&gt;&lt;br /&gt;        DatesPanel.Controls.Add(DatesTable)&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Dim&lt;/span&gt; DataContext &lt;span class="kwd"&gt;As New&lt;/span&gt; DoseReportingDataContext()&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Convert our datasource into the appropriate object type&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Dim&lt;/span&gt; Data &lt;span class="kwd"&gt;As&lt;/span&gt; IEnumerable(Of Labor) = &lt;span class="kwd"&gt;Nothing&lt;br /&gt;        Dim&lt;/span&gt; RecordCount &lt;span class="kwd"&gt;As Integer&lt;/span&gt; = 0&lt;br /&gt;        &lt;span class="kwd"&gt;If&lt;/span&gt; UseDataSource &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;            Data = &lt;span class="kwd"&gt;CType&lt;/span&gt;(RawData, IEnumerable(Of Labor))&lt;br /&gt;            RecordCount = Data.Count()&lt;br /&gt;            ViewState(&lt;span class="st"&gt;&amp;quot;ItemCount&amp;quot;&lt;/span&gt;) = RecordCount&lt;br /&gt;        &lt;span class="kwd"&gt;Else&lt;/span&gt;&lt;br /&gt;            RecordCount = ViewState(&lt;span class="st"&gt;&amp;quot;ItemCount&amp;quot;&lt;/span&gt;)&lt;br /&gt;            Data = &lt;span class="kwd"&gt;New&lt;/span&gt; List(Of Labor)(RecordCount)&lt;br /&gt;        &lt;span class="kwd"&gt;End If&lt;/span&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;if no data then return&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;If&lt;/span&gt; RecordCount &amp;lt; 1 &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;We should have a No Data Template sort of thing that gets displayed here&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwd"&gt;Return&lt;br /&gt;        End If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Auto generate dates if needed&lt;br /&gt;        &amp;#39;Check if we have a default date&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;If&lt;/span&gt; StartDate = DateTime.MinValue &lt;span class="kwd"&gt;Or&lt;/span&gt; EndDate = DateTime.MinValue &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;if we don&amp;#39;t have a start date or we don&amp;#39;t have an end date&lt;br /&gt;            &amp;#39;  then get the first entry&amp;#39;s start date and use it as a seed&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwd"&gt;Dim&lt;/span&gt; l &lt;span class="kwd"&gt;As&lt;/span&gt; Labor = Data.First()&lt;br /&gt;            AutoGenerateDates(l.StartDate)&lt;br /&gt;        &lt;span class="kwd"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;--Create and add together all of the major controls--&amp;#39;&lt;br /&gt;        &amp;#39;Set Tasks Table cell padding/spacing&lt;/span&gt;&lt;br /&gt;        TasksTable.CellPadding = 0&lt;br /&gt;        TasksTable.CellSpacing = 0&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Set scrollbars and width of dates panel&lt;/span&gt;&lt;br /&gt;        DatesPanel.ScrollBars = ScrollBars.Horizontal&lt;br /&gt;        DatesPanel.Style.Add(&lt;span class="st"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;600px&amp;quot;&lt;/span&gt;)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Set cell padding/spacing of Dates Table&lt;/span&gt;&lt;br /&gt;        DatesTable.CellPadding = 0&lt;br /&gt;        DatesTable.CellSpacing = 0&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Create Headers&lt;/span&gt;&lt;br /&gt;        CreateHeaders(StartDate, EndDate, TasksTable, DatesTable)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Get count of distinct Labor entries&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Dim&lt;/span&gt; count &lt;span class="kwd"&gt;As Integer&lt;/span&gt; = RecordCount&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;--Create Rows and Cells--&amp;#39;&lt;br /&gt;        &amp;#39;Basic objects to use for table creation&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Dim&lt;/span&gt; tr &lt;span class="kwd"&gt;As&lt;/span&gt; TableRow = &lt;span class="kwd"&gt;Nothing&lt;br /&gt;        Dim&lt;/span&gt; td &lt;span class="kwd"&gt;As&lt;/span&gt; TableCell = &lt;span class="kwd"&gt;Nothing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Create Table stuff for this work order&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Dim&lt;/span&gt; LaborCurrentCount &lt;span class="kwd"&gt;As Integer&lt;/span&gt; = 0 &lt;span class="cmt"&gt;&amp;#39;used to track our progress through the list&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;While&lt;/span&gt; LaborCurrentCount &amp;lt; count&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;--Create the entry in the Tasks table--&lt;br /&gt;            &amp;#39;Create new row for work orders table&lt;/span&gt;&lt;br /&gt;            tr = &lt;span class="kwd"&gt;New&lt;/span&gt; TableRow()&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Add new cell with Work Order name/number&lt;/span&gt;&lt;br /&gt;            td = &lt;span class="kwd"&gt;New&lt;/span&gt; TableCell()&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Set standard height on the cell&lt;/span&gt;&lt;br /&gt;            td.Height = &lt;span class="kwd"&gt;New&lt;/span&gt; WebControls.Unit(30, UnitType.Pixel)&lt;br /&gt;&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Get current workorder&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwd"&gt;Dim&lt;/span&gt; CurrentLabor &lt;span class="kwd"&gt;As&lt;/span&gt; Labor = &lt;span class="kwd"&gt;Nothing&lt;br /&gt;&lt;br /&gt;            If&lt;/span&gt; UseDataSource &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;                CurrentLabor = Data(LaborCurrentCount)&lt;br /&gt;                &lt;span class="cmt"&gt;&amp;#39;set cell text&lt;/span&gt;&lt;br /&gt;                td.Text = CurrentLabor.AlaraTask.WorkOrderTask.WorkOrder + &lt;span class="st"&gt;&amp;quot;:&amp;quot;&lt;/span&gt; + CurrentLabor.AlaraTask.TaskNumber.ToString(&lt;span class="st"&gt;&amp;quot;00&amp;quot;&lt;/span&gt;) + &lt;span class="st"&gt;&amp;quot;:&amp;quot;&lt;/span&gt; + CurrentLabor.AlaraTask.TaskNumber.ToString(&lt;span class="st"&gt;&amp;quot;00&amp;quot;&lt;/span&gt;)&lt;br /&gt;                td.ToolTip = CurrentLabor.AlaraTask.AlaraDescription + Environment.NewLine + CurrentLabor.AlaraTask.AlaraSubDescription&lt;br /&gt;            &lt;span class="kwd"&gt;End If&lt;/span&gt;&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Add cell to row&lt;/span&gt;&lt;br /&gt;            tr.Cells.Add(td)&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Add row to work orders table&lt;/span&gt;&lt;br /&gt;            TasksTable.Rows.Add(tr)&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;--Load per date info if present--&lt;br /&gt;            &amp;#39;Copy the Start Date&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwd"&gt;Dim&lt;/span&gt; TaskDate &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime = StartDate&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Create table row for this work orders date info&lt;/span&gt;&lt;br /&gt;            tr = &lt;span class="kwd"&gt;New&lt;/span&gt; TableRow()&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;while we have not passed the end date&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwd"&gt;While&lt;/span&gt; TaskDate &amp;lt;= EndDate&lt;br /&gt;                &lt;span class="cmt"&gt;&amp;#39;new table cell for this day&lt;/span&gt;&lt;br /&gt;                td = &lt;span class="kwd"&gt;New&lt;/span&gt; TableCell()&lt;br /&gt;                &lt;span class="cmt"&gt;&amp;#39;set to uniform height&lt;/span&gt;&lt;br /&gt;                td.Height = &lt;span class="kwd"&gt;New&lt;/span&gt; WebControls.Unit(30, UnitType.Pixel)&lt;br /&gt;                &lt;span class="cmt"&gt;&amp;#39;Check for holidays/weekend&lt;/span&gt;&lt;br /&gt;                HandleSpecialDays(td, TaskDate)&lt;br /&gt;                &lt;span class="cmt"&gt;&amp;#39;Will instantiate this once we know how we are going to do it&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwd"&gt;Dim&lt;/span&gt; dData &lt;span class="kwd"&gt;As&lt;/span&gt; EstimatedDoseItem = &lt;span class="kwd"&gt;Nothing&lt;/span&gt;&lt;br /&gt;                &lt;span class="cmt"&gt;&amp;#39;if we are using the datasource&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwd"&gt;If&lt;/span&gt; UseDataSource &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;                    &lt;span class="cmt"&gt;&amp;#39;Query if there is any data for this day/Labor Entry&lt;br /&gt;                    &amp;#39;   for this query we ONLY have to look for the day and work order number&lt;br /&gt;                    &amp;#39;   in our previous query we already slimmed it down to department and month/year&lt;/span&gt;&lt;br /&gt;                    &lt;span class="kwd"&gt;Dim&lt;/span&gt; wodData = From c &lt;span class="kwd"&gt;In&lt;/span&gt; CurrentLabor.DoseEstimates _&lt;br /&gt;                                  Where c.DateForEstimate.&lt;span class="kwd"&gt;Date&lt;/span&gt; = TaskDate.&lt;span class="kwd"&gt;Date&lt;/span&gt;&lt;br /&gt;                    &lt;span class="cmt"&gt;&amp;#39;if we have data then load it into the EstimatedDoseItem, if no data then input placeholders&lt;/span&gt;&lt;br /&gt;                    &lt;span class="kwd"&gt;If&lt;/span&gt; wodData.Count &amp;gt; 0 &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;                        dData = &lt;span class="kwd"&gt;New&lt;/span&gt; EstimatedDoseItem(wodData.First(), Page)&lt;br /&gt;                    &lt;span class="kwd"&gt;Else&lt;/span&gt;&lt;br /&gt;                        dData = &lt;span class="kwd"&gt;New&lt;/span&gt; EstimatedDoseItem(TaskDate, CurrentLabor.LaborID, CurrentLabor.DepartmentID, Page)&lt;br /&gt;                    &lt;span class="kwd"&gt;End If&lt;br /&gt;                Else&lt;/span&gt;&lt;br /&gt;                    dData = &lt;span class="kwd"&gt;New&lt;/span&gt; EstimatedDoseItem()&lt;br /&gt;                &lt;span class="kwd"&gt;End If&lt;/span&gt;&lt;br /&gt;                &lt;span class="cmt"&gt;&amp;#39;Add event handler for when the text is changed&lt;br /&gt;                &amp;#39;AddHandler dData.DoseChanged, AddressOf DataUpdated&lt;br /&gt;                &amp;#39;Add the Estimated Dose Item to the TD&lt;/span&gt;&lt;br /&gt;                td.Controls.Add(dData)&lt;br /&gt;                &lt;span class="cmt"&gt;&amp;#39;Add cell to the row&lt;/span&gt;&lt;br /&gt;                tr.Cells.Add(td)&lt;br /&gt;                &lt;span class="cmt"&gt;&amp;#39;Increment the date by 1&lt;/span&gt;&lt;br /&gt;                TaskDate = TaskDate.AddDays(1)&lt;br /&gt;            &lt;span class="kwd"&gt;End While&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Add in the Row&lt;/span&gt;&lt;br /&gt;            DatesTable.Rows.Add(tr)&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Move onto the next work order&lt;/span&gt;&lt;br /&gt;            LaborCurrentCount += 1&lt;br /&gt;        &lt;span class="kwd"&gt;End While&lt;br /&gt;    End Sub&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;Public Class&lt;/span&gt; EstimatedDoseItem&lt;br /&gt;    &lt;span class="kwd"&gt;Inherits&lt;/span&gt; TextBox&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Public Event&lt;/span&gt; DoseChanged &lt;span class="kwd"&gt;As&lt;/span&gt; EventHandler&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Public ReadOnly Property&lt;/span&gt; DoseEstimate() &lt;span class="kwd"&gt;As&lt;/span&gt; DoseEstimate&lt;br /&gt;        &lt;span class="kwd"&gt;Get&lt;br /&gt;            Return&lt;/span&gt; _DoseEstimateStore.GetDoseEstimate()&lt;br /&gt;        &lt;span class="kwd"&gt;End Get&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;    Protected&lt;/span&gt; _DoseEstimateStore &lt;span class="kwd"&gt;As&lt;/span&gt; DoseEstimateStore&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Public Sub New&lt;/span&gt;(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; EstimateDate &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime, &lt;span class="kwd"&gt;ByVal&lt;/span&gt; LaborID &lt;span class="kwd"&gt;As Integer&lt;/span&gt;, &lt;span class="kwd"&gt;ByVal&lt;/span&gt; Department &lt;span class="kwd"&gt;As Integer&lt;/span&gt;, &lt;span class="kwd"&gt;ByVal&lt;/span&gt; ParentPage &lt;span class="kwd"&gt;As&lt;/span&gt; Page)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Load all values into a DoseEstimate object&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Dim&lt;/span&gt; DoseEstimate &lt;span class="kwd"&gt;As New&lt;/span&gt; DoseEstimate()&lt;br /&gt;        DoseEstimate.DateForEstimate = EstimateDate&lt;br /&gt;        DoseEstimate.LaborID = LaborID&lt;br /&gt;        DoseEstimate.EstimatedDose = 0D&lt;br /&gt;&lt;br /&gt;        _DoseEstimateStore = &lt;span class="kwd"&gt;New&lt;/span&gt; DoseEstimateStore(DoseEstimate)&lt;br /&gt;&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;ParentPage.RegisterRequiresControlState(Me) &amp;#39;Let the page know that this control needs it&amp;#39;s state saved&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;br /&gt;&lt;br /&gt;    Public Sub New&lt;/span&gt;(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; DoseEstimate &lt;span class="kwd"&gt;As&lt;/span&gt; DoseEstimate, &lt;span class="kwd"&gt;ByVal&lt;/span&gt; ParentPage &lt;span class="kwd"&gt;As&lt;/span&gt; Page)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Load in provided Dose Estimate object&lt;/span&gt;&lt;br /&gt;        _DoseEstimateStore = &lt;span class="kwd"&gt;New&lt;/span&gt; DoseEstimateStore(DoseEstimate)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;ParentPage.RegisterRequiresControlState(Me) &amp;#39;Let the page know that this control needs it&amp;#39;s state saved&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;br /&gt;&lt;br /&gt;    Public Sub New&lt;/span&gt;()&lt;br /&gt;        _DoseEstimateStore = &lt;span class="kwd"&gt;New&lt;/span&gt; DoseEstimateStore()&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub&lt;/span&gt; OnLoad(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwd"&gt;As&lt;/span&gt; System.EventArgs)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;On load change the width of the txt box&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Me&lt;/span&gt;.Columns = 5&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;Center the text&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Me&lt;/span&gt;.Style.Add(&lt;span class="st"&gt;&amp;quot;text-align&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;center&amp;quot;&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwd"&gt;MyBase&lt;/span&gt;.OnLoad(e)&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub&lt;/span&gt; OnTextChanged(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwd"&gt;As&lt;/span&gt; System.EventArgs)&lt;br /&gt;        &lt;span class="kwd"&gt;RaiseEvent&lt;/span&gt; DoseChanged(&lt;span class="kwd"&gt;Me&lt;/span&gt;, e)&lt;br /&gt;        &lt;span class="kwd"&gt;MyBase&lt;/span&gt;.OnTextChanged(e)&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="cmt"&gt;&amp;#39;Override Text property of textbox so that it references the Estimated Dose&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Public Overrides Property&lt;/span&gt; Text() &lt;span class="kwd"&gt;As String&lt;br /&gt;        Get&lt;br /&gt;            Return&lt;/span&gt; _DoseEstimateStore.EstimatedDose.ToString()&lt;br /&gt;        &lt;span class="kwd"&gt;End Get&lt;br /&gt;        Set&lt;/span&gt;(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwd"&gt;As String&lt;/span&gt;)&lt;br /&gt;            _DoseEstimateStore.EstimatedDose = Convert.ToDecimal(value)&lt;br /&gt;        &lt;span class="kwd"&gt;End Set&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;    Protected Overrides Function&lt;/span&gt; SaveControlState() &lt;span class="kwd"&gt;As Object&lt;br /&gt;        Dim&lt;/span&gt; state(2) &lt;span class="kwd"&gt;As Object&lt;/span&gt; &lt;span class="cmt"&gt;&amp;#39;object array to hold data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        state(0) = &lt;span class="kwd"&gt;MyBase&lt;/span&gt;.SaveControlState() &lt;span class="cmt"&gt;&amp;#39;Save the base controls state&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        state(1) = _DoseEstimateStore &lt;span class="cmt"&gt;&amp;#39;Save dose estimate object&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;Return&lt;/span&gt; state &lt;span class="cmt"&gt;&amp;#39;Return the object array for saving&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;End Function&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub&lt;/span&gt; LoadControlState(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; savedState &lt;span class="kwd"&gt;As Object&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwd"&gt;MyBase&lt;/span&gt;.LoadControlState(savedState(0)) &lt;span class="cmt"&gt;&amp;#39;First load the base controls state&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        _DoseEstimateStore = savedState(1) &lt;span class="cmt"&gt;&amp;#39;Load date for estimate&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="cmt"&gt;&amp;#39;This function saves the data in the cell back to the database&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Public Sub&lt;/span&gt; Save(&lt;span class="kwd"&gt;ByRef&lt;/span&gt; DataContext &lt;span class="kwd"&gt;As&lt;/span&gt; DoseReportingDataContext)&lt;br /&gt;        &lt;span class="cmt"&gt;&amp;#39;if this is an existing entry then update it&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;If&lt;/span&gt; _DoseEstimateStore.EstimateID &amp;lt;&amp;gt; 0 &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Get Dose Estimate object&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwd"&gt;Dim&lt;/span&gt; DoseEstimate &lt;span class="kwd"&gt;As&lt;/span&gt; DoseEstimate = _DoseEstimateStore.GetDoseEstimate()&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;Attach it, with modified set to true so it will get updated&lt;/span&gt;&lt;br /&gt;            DataContext.DoseEstimates.Attach(DoseEstimate, &lt;span class="kwd"&gt;True&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwd"&gt;Else&lt;/span&gt;&lt;br /&gt;            &lt;span class="cmt"&gt;&amp;#39;if this is a new entry, and it has data&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwd"&gt;If&lt;/span&gt; _DoseEstimateStore.EstimatedDose &amp;lt;&amp;gt; 0D &lt;span class="kwd"&gt;Then&lt;/span&gt;&lt;br /&gt;                DataContext.DoseEstimates.InsertOnSubmit(_DoseEstimateStore.GetDoseEstimate())&lt;br /&gt;            &lt;span class="kwd"&gt;End If&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;End Class&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Serializable()&amp;gt; _&lt;br /&gt;&lt;span class="kwd"&gt;Public Class&lt;/span&gt; DoseEstimateStore&lt;br /&gt;    &lt;span class="kwd"&gt;Public&lt;/span&gt; EstimateID &lt;span class="kwd"&gt;As Integer&lt;/span&gt; = 0&lt;br /&gt;    &lt;span class="kwd"&gt;Public&lt;/span&gt; DateForEstimate &lt;span class="kwd"&gt;As&lt;/span&gt; DateTime = DateTime.MinValue&lt;br /&gt;    &lt;span class="kwd"&gt;Public&lt;/span&gt; LaborID &lt;span class="kwd"&gt;As Integer&lt;/span&gt; = 0&lt;br /&gt;    &lt;span class="kwd"&gt;Public&lt;/span&gt; EstimatedDose &lt;span class="kwd"&gt;As Decimal&lt;/span&gt; = 0D&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwd"&gt;Public Sub New&lt;/span&gt;()&lt;br /&gt;    &lt;span class="kwd"&gt;End Sub&lt;br /&gt;&lt;br /&gt;    Public Sub New&lt;/span&gt;(&lt;span class="kwd"&gt;ByRef&lt;/span&gt; DoseEstimate &lt;span class="kwd"&gt;As&lt;/span&gt; DoseEstimate)&lt;br /&gt;        &lt;span class="kwd"&gt;With&lt;/span&gt; DoseEstimate&lt;br /&gt;            EstimateID = .EstimateID&lt;br /&gt;            DateForEstimate = .DateForEstimate&lt;br /&gt;            LaborID = .LaborID&lt;br /&gt;            EstimatedDose = .EstimatedDose&lt;br /&gt;        &lt;span class="kwd"&gt;End With&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Public Function&lt;/span&gt; GetDoseEstimate() &lt;span class="kwd"&gt;As&lt;/span&gt; DoseEstimate&lt;br /&gt;        &lt;span class="kwd"&gt;Dim&lt;/span&gt; DoseEstimate &lt;span class="kwd"&gt;As New&lt;/span&gt; DoseEstimate()&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwd"&gt;With&lt;/span&gt; DoseEstimate&lt;br /&gt;            .EstimateID = EstimateID&lt;br /&gt;            .DateForEstimate = DateForEstimate&lt;br /&gt;            .LaborID = LaborID&lt;br /&gt;            .EstimatedDose = EstimatedDose&lt;br /&gt;        &lt;span class="kwd"&gt;End With&lt;br /&gt;&lt;br /&gt;        Return&lt;/span&gt; DoseEstimate&lt;br /&gt;    &lt;span class="kwd"&gt;End Function&lt;br /&gt;End Class&lt;/span&gt;&lt;/pre&gt;&amp;nbsp;</description></item></channel></rss>