(I just posted this, but the page blew up so I apologize if the content is being posted twice - I couldn't find the original after posting)
I am having a problem getting my RadTooltips to render on my calendar controls. I have followed the following demo with no problems: http://demos.telerik.com/aspnet-ajax/tooltip/examples/tooltipcalendar/defaultvb.aspx?show-source=true. I was able to run the local sample with no problems but when I translate that to my own page, the "standard" tooltips appear (see attached screenshot), instead of my customized content.
I have noticed what I think may be close to the source of the problem - the Ajax Update event never fires, despite the fact that I see the controls properly added to the calendar's RadTooltipManager.
Can anyone see what I am missing here? I have done a detailed comparison between my local working demo sample and my real page and cannot see what is missing.
Here is the content and code-behind pages for reference. The calendar code starts around line 147 and the calendar event handler code starts in a Region block around line 719. Hopefully that makes it a little easier to track.
and here is the code-behind:
I am having a problem getting my RadTooltips to render on my calendar controls. I have followed the following demo with no problems: http://demos.telerik.com/aspnet-ajax/tooltip/examples/tooltipcalendar/defaultvb.aspx?show-source=true. I was able to run the local sample with no problems but when I translate that to my own page, the "standard" tooltips appear (see attached screenshot), instead of my customized content.
I have noticed what I think may be close to the source of the problem - the Ajax Update event never fires, despite the fact that I see the controls properly added to the calendar's RadTooltipManager.
Can anyone see what I am missing here? I have done a detailed comparison between my local working demo sample and my real page and cannot see what is missing.
Here is the content and code-behind pages for reference. The calendar code starts around line 147 and the calendar event handler code starts in a Region block around line 719. Hopefully that makes it a little easier to track.
<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/masterpages/OneColumn.master" CodeBehind="ReconcileTime.aspx.vb" Inherits="SOREOIB.ReconcileTime" %><%@ Register Src="~/controls/pickers/CustomerPicker.ascx" TagName="CustomerPicker" TagPrefix="uc1" %><%@ Register Src="~/controls/pickers/EmployeePicker.ascx" TagName="EmployeePicker" TagPrefix="uc2" %><%@ Register Src="~/controls/linkers/ContactLink.ascx" TagName="ContactLink" TagPrefix="uc3" %><%@ Register Src="~/controls/pickers/AuthorizationPicker.ascx" TagName="AuthorizationPicker" TagPrefix="uc4" %><%@ Register Src="~/controls/linkers/AuthorizationLink.ascx" TagName="AuthorizationLink" TagPrefix="uc5" %><%@ Register Src="../../../controls/pickers/ServiceCodePicker.ascx" TagName="ServiceCodePicker" TagPrefix="uc8" %><%@ Register Src="../../../controls/pickers/FundingOrganizationPicker.ascx" TagName="FundingOrganizationPicker" TagPrefix="uc6" %><%@ Register Src="../../../controls/BillingPeriodPicker.ascx" TagName="BillingPeriodPicker" TagPrefix="uc7" %><%@ Register Assembly="Telerik.OpenAccess.Web, Version=2014.3.1209.1, Culture=neutral, PublicKeyToken=7ce17eeaf1d59342" Namespace="Telerik.OpenAccess" TagPrefix="telerik" %><%@ Register src="controls/TimeForDay.ascx" tagname="TimeForDay" tagprefix="uc9" %><asp:Content ID="Content1" ContentPlaceHolderID="cphMain" runat="server"> <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server"> </telerik:RadAjaxLoadingPanel> <script type="text/javascript"> function onRequestStart(sender, args) { if (args.get_eventTarget().indexOf("btnExportToExcel") >= 0) args.set_enableAjax(false); } </script> <div style="background-image: url(../../../images/betasoftware-s.jpg); background-repeat: no-repeat; background-position: right top;"> <table cellpadding="5"> <tr> <td rowspan="4"> <span style="position: relative; top: 15px;"> <asp:Image ID="Image1" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/window_gear-m.png" /> </span> </td> <td> <h2>Step 1: Import Raw Time Report Data </h2> <div class="Instructions"> Import the raw <asp:Label ID="Label2" runat="server" Text="<%$ Resources:G3Resources, TimekeepingSystemName %>"></asp:Label> timesheet file using the form below. </div> </td> </tr> <tr> <td> <telerik:RadAsyncUpload ID="uplTimesheetDetailReportFile" runat="server" TargetFolder="~/App_Data/Temp"> </telerik:RadAsyncUpload> </td> </tr> <tr> <td> <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel2" runat="server"> </telerik:RadAjaxLoadingPanel> <telerik:RadAjaxPanel ID="RadAjaxPanel2" LoadingPanelID="RadAjaxLoadingPanel2" ClientEvents-OnRequestStart="onRequestStart" runat="server" Width="300px" Height="50px"> <asp:Label ID="lblStatus" runat="server" Text="Ready."></asp:Label> <br /> <br /> <telerik:RadButton ID="btnImport" runat="server" Text="Import File"></telerik:RadButton> </telerik:RadAjaxPanel> </td> </tr> </table> <br /> <br /> <br /> <telerik:RadAjaxPanel ID="RadAjaxPanel1" LoadingPanelID="RadAjaxLoadingPanel1" ClientEvents-OnRequestStart="onRequestStart" runat="server"> </telerik:RadAjaxPanel> <table cellpadding="5"> <tr> <td rowspan="4"> <span style="position: relative; top: 15px;"> <asp:Image ID="Image2" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/window_gear-m.png" /> </span> </td> <td colspan="4"> <h2>Step 2: Verify the content</h2> <div class="Instructions"> Verify that the dates within the source data are overlapping. </div> </td> </tr> <tr> <td colspan="4"> <table width="100%" cellpadding="5"> <tr> <td> <asp:Button ID="btnGetStatistics" runat="server" Text="Get Statistics" /> </td> <td align="center"> <span style="position:relative; font-size:larger; font-weight:bold;"> Dates with Relevant Time Records in Green </span> </td> </tr> <tr> <td> <div style="font-size: large; font-weight: bold;">CMS Report</div> <table> <tr> <td> Begin: </td> <td> <asp:Label ID="lblCMSReportStartDate" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> End: </td> <td> <asp:Label ID="lblCMSReportEndDate" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td colspan="2"> </td> </tr> <tr> <td> Records: </td> <td> <asp:Label ID="lblCMSReportRecordCount" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> First ID: </td> <td> <asp:Label ID="lblCMSReportFirstTimesheetID" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> Last ID: </td> <td> <asp:Label ID="lblCMSReportLastTimesheetID" runat="server" Text="?"></asp:Label> </td> </tr> </table> </td> <td> <telerik:RadCalendar ID="datCMSReport" runat="server" EnableWeekends="True" FastNavigationNextText="<<" SelectedDate="" MultiViewColumns="3" AutoPostBack="false" CssClass="RadCalendarMultiView RadCalendarMultiView_Default"> <SpecialDays> <telerik:RadCalendarDay Date="" Repeatable="Today"> <ItemStyle CssClass="rcToday" /> </telerik:RadCalendarDay> </SpecialDays> <WeekendDayStyle CssClass="rcWeekend" /> <CalendarTableStyle CssClass="rcMainTable" /> <OtherMonthDayStyle CssClass="rcOtherMonth" /> <OutOfRangeDayStyle CssClass="rcOutOfRange" /> <DisabledDayStyle CssClass="rcDisabled" /> <SelectedDayStyle CssClass="rcSelected" /> <DayOverStyle CssClass="rcHover" /> <FastNavigationStyle CssClass="RadCalendarMonthView RadCalendarMonthView_Default" /> <ViewSelectorStyle CssClass="rcViewSel" /> </telerik:RadCalendar> </td> </tr> <tr id="rowLastImport" runat="server"> <td> <div style="font-size: large; font-weight: bold;">Last Billing File</div> <table> <tr> <td> Begin: </td> <td> <asp:Label ID="lblLatestBillingFileImportStartDate" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> End: </td> <td> <asp:Label ID="lblLatestBillingFileImportEndDate" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> </td> </tr> <tr> <td> Records: </td> <td> <asp:Label ID="lblLatestBillingFileImportRecordCount" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> First ID: </td> <td> <asp:Label ID="lblLatestBillingFileImportFirstTimesheetID" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> Last ID: </td> <td> <asp:Label ID="lblLatestBillingFileImportLastTimesheetID" runat="server" Text="?"></asp:Label> </td> </tr> </table> </td> <td> <telerik:RadCalendar ID="datLatestBillingFileImport" runat="server" AutoPostBack="True" EnableWeekends="True" FastNavigationNextText="<<" SelectedDate="" MultiViewColumns="3"> <SpecialDays> <telerik:RadCalendarDay Date="" Repeatable="Today"> <ItemStyle CssClass="rcToday" /> </telerik:RadCalendarDay> </SpecialDays> <WeekendDayStyle CssClass="rcWeekend" /> <CalendarTableStyle CssClass="rcMainTable" /> <OtherMonthDayStyle CssClass="rcOtherMonth" /> <OutOfRangeDayStyle CssClass="rcOutOfRange" /> <DisabledDayStyle CssClass="rcDisabled" /> <SelectedDayStyle CssClass="rcSelected" /> <DayOverStyle CssClass="rcHover" /> <FastNavigationStyle CssClass="RadCalendarMonthView RadCalendarMonthView_Default" /> <ViewSelectorStyle CssClass="rcViewSel" /> </telerik:RadCalendar> </td> </tr> <tr> <td> <div style="font-size: large; font-weight: bold;">G2 Timesheet</div> <table> <tr> <td> Begin: </td> <td> <asp:Label ID="lblG2StartDate" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> End: </td> <td> <asp:Label ID="lblG2EndDate" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> </td> </tr> <tr> <td> Records: </td> <td> <asp:Label ID="lblG2RecordCount" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> First ID: </td> <td> <asp:Label ID="lblFirstG2TimesheetID" runat="server" Text="?"></asp:Label> </td> </tr> <tr> <td> Last ID: </td> <td> <asp:Label ID="lblLastG2TimesheetID" runat="server" Text="?"></asp:Label> </td> </tr> </table> </td> <td> <telerik:RadCalendar ID="datG2Timesheet" runat="server" AutoPostBack="True" EnableWeekends="True" FastNavigationNextText="<<" SelectedDate="" MultiViewColumns="3"> <SpecialDays> <telerik:RadCalendarDay Date="" Repeatable="Today"> <ItemStyle CssClass="rcToday" /> </telerik:RadCalendarDay> </SpecialDays> <WeekendDayStyle CssClass="rcWeekend" /> <CalendarTableStyle CssClass="rcMainTable" /> <OtherMonthDayStyle CssClass="rcOtherMonth" /> <OutOfRangeDayStyle CssClass="rcOutOfRange" /> <DisabledDayStyle CssClass="rcDisabled" /> <SelectedDayStyle CssClass="rcSelected" /> <DayOverStyle CssClass="rcHover" /> <FastNavigationStyle CssClass="RadCalendarMonthView RadCalendarMonthView_Default" /> <ViewSelectorStyle CssClass="rcViewSel" /> </telerik:RadCalendar> </td> </tr> </table> </td> </tr> </table> <br /> <br /> <br /> <table cellpadding="5"> <tr> <td rowspan="4"> <span style="position: relative; top: 15px;"> <asp:Image ID="Image5" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/window_gear-m.png" /> </span> </td> <td colspan="4"> <h2>Step 3: Configure Filters & Settings </h2> <div class="Instructions"> Change the filtering criteria for data inspection using the form below. </div> </td> </tr> <tr> <td> <asp:HyperLink ID="lnkManageDiscipline" runat="server" CssClass="SectionTitle">Date Ranges</asp:HyperLink> <span class="SectionInstructions">Choose what time frame to view.</span> </td> <td> <asp:HyperLink ID="HyperLink3" runat="server" CssClass="SectionTitle">People Filter</asp:HyperLink> <span class="SectionInstructions">Filter by the <asp:Label ID="Label1" runat="server" Text="<%$ Resources:G3Resources, ClientNomenclature %>"></asp:Label> or <asp:Label ID="Label3" runat="server" Text="<%$ Resources:G3Resources, ProviderNomenclature %>"></asp:Label>.</span> </td> <td align="left"> <asp:HyperLink ID="HyperLink1" runat="server" CssClass="SectionTitle">MCO Filter</asp:HyperLink> <span class="SectionInstructions">Filter by Funding Organization.</span> </td> <td align="left"> <asp:HyperLink ID="HyperLink2" runat="server" CssClass="SectionTitle">Other Filters</asp:HyperLink> <span class="SectionInstructions">Miscellaneous filters.</span> </td> </tr> <tr> <td> <uc7:BillingPeriodPicker ID="ctlBillingPeriodPicker" runat="server" OverrideDatePresets="true" /> </td> <td> <uc2:EmployeePicker ID="ctlEmployeePicker" runat="server" DisplayMode="SimpleWithLabel" Label="<%$ Resources:G3Resources, ProviderNomenclature %>" DisableAutoPostback="true" /> <uc1:CustomerPicker ID="ctlCustomerPicker" runat="server" DisplayMode="SimpleWithLabel" Label="<%$ Resources:G3Resources, ClientNomenclature %>" DisableAutoPostback="true" /> </td> <td> <uc6:FundingOrganizationPicker ID="ctlFundingOrganization" runat="server" DisplayMode="SimpleWithLabel" Label="Funding Org:" DisableAutoPostback="true" /> </td> <td> <asp:CheckBox ID="chkIncludeLastImport" runat="server" AutoPostBack="false" Text="Include data from last billing file import" Checked="true" /> <asp:CheckBox ID="chkErrorsOnly" runat="server" Text="Include only records with time differences" Enabled="True" /> <asp:CheckBox ID="chkSingleTimesheetID" runat="server" Text="Filter on only one TimesheetID" Enabled="True" /> <div style="position: relative; left: 20px;"> <telerik:RadNumericTextBox ID="radTimesheetID" runat="server" DataType="System.Int32" LabelWidth="40px" MinValue="1" Width="75px"> <NegativeStyle Resize="None" /> <NumberFormat DecimalDigits="0" GroupSeparator="" ZeroPattern="n" /> <EmptyMessageStyle Resize="None" /> <ReadOnlyStyle Resize="None" /> <FocusedStyle Resize="None" /> <DisabledStyle Resize="None" /> <InvalidStyle Resize="None" /> <HoveredStyle Resize="None" /> <EnabledStyle Resize="None" /> </telerik:RadNumericTextBox> </div> </td> </tr> <tr> <td colspan="4"> <asp:Button ID="btnSearch" runat="server" Text="Search" /> <asp:Button ID="btnReset" runat="server" Text="Reset" /> </td> </tr> </table> <br /> <br /> <br /> <table cellpadding="5"> <tr> <td rowspan="4"> <span style="position: relative; top: 15px;"> <asp:Image ID="Image3" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/window_gear-m.png" /> </span> </td> <td colspan="4"> <h2>Step 4: View the results </h2> <div class="Instructions"> View and pivot the results below. </div> </td> </tr> <tr> <td colspan="2" align="right"> <telerik:RadButton ID="btnExportToExcel" runat="server" Text="Export to Excel"> </telerik:RadButton> <telerik:RadButton ID="btnExpandCollapseGroups" runat="server" Text="Expand / Collapse Groups"> </telerik:RadButton> </td> </tr> <tr> <td colspan="4"> <telerik:RadPivotGrid ID="pvtCMStoG2" runat="server" EnableToolTips="true" EnableCaching="true" RowTableLayout="Outline" DataSourceID="sqlCMStoG2TimesheetValidation" PageSize="15" AggregatesLevel="1" RowGroupsDefaultExpanded="False"> <PagerStyle ChangePageSizeButtonToolTip="Change Page Size" PageSizeControlType="RadComboBox" AlwaysVisible="True"></PagerStyle> <Fields> <telerik:PivotGridColumnField Caption="Source" DataField="Source" UniqueName="Source"> <CalculatedItems> <telerik:PivotGridCalculatedItem GroupName="Difference"></telerik:PivotGridCalculatedItem> </CalculatedItems> </telerik:PivotGridColumnField> <telerik:PivotGridRowField DataField="MCO" UniqueName="MCO" Caption="MCO"> </telerik:PivotGridRowField> <telerik:PivotGridRowField Caption="<%$ Resources:G3Resources, ClientNomenclature %>" DataField="Customer" UniqueName="Customer"> </telerik:PivotGridRowField> <telerik:PivotGridRowField DataField="ServiceStarted" Caption="Start Time" DataFormatString="{0:f}" UniqueName="ServiceStarted"> </telerik:PivotGridRowField> <telerik:PivotGridAggregateField Aggregate="Sum" DataField="Hours" GrandTotalAggregateFormatString="" Caption="Total Hours" UniqueName="SumOfHours"> <TotalFormat Axis="Rows" Level="0" SortOrder="Ascending" GroupName="SumOfHours" /> <HeaderCellTemplate> <asp:Label ID="lblHeader" runat="server" Text="Total Hours"></asp:Label> </HeaderCellTemplate> </telerik:PivotGridAggregateField> <telerik:PivotGridAggregateField Aggregate="Count" DataField="Hours" GrandTotalAggregateFormatString="" Caption="Service Visits" UniqueName="CountOfVisits"> <TotalFormat Axis="Rows" Level="0" SortOrder="Ascending" /> <HeaderCellTemplate> <asp:Label ID="lblHeader" runat="server" Text="Service Count"></asp:Label> </HeaderCellTemplate> </telerik:PivotGridAggregateField> </Fields> <TotalsSettings RowGrandTotalsPosition="Last" ColumnGrandTotalsPosition="None" /> <ConfigurationPanelSettings EnableOlapTreeViewLoadOnDemand="True"></ConfigurationPanelSettings> </telerik:RadPivotGrid> <asp:SqlDataSource ID="sqlCMStoG2TimesheetValidation" runat="server" ConnectionString="<%$ ConnectionStrings:SOREOConnection %>" SelectCommand="reconciliation.cspCMStoG2TimesheetValidation" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="false"> <SelectParameters> <asp:Parameter Name="BeginDate" Type="DateTime" /> <asp:Parameter Name="EndDate" Type="DateTime" /> <asp:ControlParameter ControlID="ctlEmployeePicker" PropertyName="SelectedEmployeeID" Name="EmployeeID" /> <asp:ControlParameter ControlID="ctlCustomerPicker" PropertyName="SelectedCustomerID" Name="CustomerID" /> <asp:ControlParameter ControlID="ctlFundingOrganization" PropertyName="SelectedFundingOrganizationName" Name="FundingAgency" /> <asp:Parameter Name="TimesheetID" Type="Int32" /> <asp:ControlParameter ControlID="chkIncludeLastImport" PropertyName="Checked" Name="IncludeLastImport" /> <asp:ControlParameter ControlID="chkErrorsOnly" PropertyName="Checked" Name="ErrorsOnly" /> </SelectParameters> </asp:SqlDataSource> </td> </tr> </table> </div><telerik:RadToolTipManager Width="250px" Height="300px" RelativeTo="Element" ID="RadToolTipManager2"runat="server" OffsetX="15" Position="MiddleRight"Skin="Telerik"></telerik:RadToolTipManager></asp:Content>and here is the code-behind:
Imports Telerik.Web.UI.PivotGrid.Core.AggregatesImports System.DrawingImports System.IOImports LumenWorks.Framework.IO.CsvPublic Class ReconcileTime Inherits System.Web.UI.Page#Region "GLOBAL OBJECTS" 'Constants... Private Const pc_strRelevantBackgroundCellColor As String = "#CCFFCC"#End Region#Region "PAGE EVENT OVERRIDES" Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'Perform initial page processing. If Not Page.IsPostBack Then 'Preset the date pickers. 'ctlBillingPeriodPicker.RootDate 'datFrom.SelectedDate = BillingPeriodHelper.ComputeStartDate(BillingFrequencyEnum.Weekly) 'datTo.SelectedDate = BillingPeriodHelper.ComputeEndDate(BillingFrequencyEnum.Weekly) ctlBillingPeriodPicker.StartDate = #1/1/2015# ctlBillingPeriodPicker.EndDate = #1/31/2015# 'Set the focused date for the calendars. datCMSReport.FocusedDate = Now.Date.AddMonths(-2) datLatestBillingFileImport.FocusedDate = Now.Date.AddMonths(-2) datG2Timesheet.FocusedDate = Now.Date.AddMonths(-2) End If 'Toggle item visibility based on preferences. rowLastImport.Visible= chkIncludeLastImport.Checked End Sub#End Region#Region "MISCELLANEOUS EVENT HANDLERS" Protected Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click ''Collapse the pivot grid content. 'pvtCMStoG2.CollapseAllRowGroups() 'pvtCMStoG2.CollapseAllColumnGroups() 'Bind the pivot grid. pvtCMStoG2.DataBind() End Sub Protected Sub btnGetStatistics_Click(sender As Object, e As EventArgs) Handles btnGetStatistics.Click 'Calculate the date boundaries. Call RetrieveStatistics() End Sub Protected Sub btnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click 'datFrom.SelectedDate= 'datTo.SelectedDate = 'Reset the people pickers. ctlCustomerPicker.ResetPicker() ctlEmployeePicker.ResetPicker() 'Reset other controls. ctlFundingOrganization.ResetPicker() End Sub Protected Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click Try 'Get the name of the file that was just uploaded. Dim m_strUploadedFileName As String = uplTimesheetDetailReportFile.UploadedFiles(0).FileName 'Process the CSV file Call ProcessCSVUsingCSVReader(Server.MapPath("~/App_Data/Temp/" & m_strUploadedFileName)) 'Compute the earliest and latest dates in the file. Using dbContext As New EntitiesModel() 'Get the first imported record. Dim FirstResult = (From item In dbContext.DetailedTimesheetReports Order By item.ServiceStarted Ascending).First 'Get the last record. Dim LastResult = (From item In dbContext.DetailedTimesheetReports Order By item.ServiceStarted Ascending).Last 'Set the status lblStatus.Text = String.Format("<span style='font-weight:bold;'>Successfully imported the csv file.</span><br>The import contains records from {0:d} (Timesheet ID {1}) to {2:d} (Timesheet ID {3}).", FirstResult.ServiceStarted, FirstResult.TimesheetID, LastResult.ServiceStarted, LastResult.TimesheetID) lblStatus.ForeColor = Color.Green End Using Catch ex As Exception 'Set the status lblStatus.Text = "Error importing the csv file." lblStatus.ToolTip = ex.Message lblStatus.Font.Bold = True lblStatus.ForeColor = Color.Red End Try End Sub Protected Sub btnExportToExcel_Click(sender As Object, e As EventArgs) Handles btnExportToExcel.Click 'Export the file. pvtCMStoG2.ExportToExcel() End Sub Protected Sub btnExpandCollapseGroups_Click(sender As Object, e As EventArgs) Handles btnExpandCollapseGroups.Click 'Toggle groups. pvtCMStoG2.ExpandAllRowGroups() End Sub#End Region#Region "PIVOT GRID EVENT HANDLERS" Private Sub pvtCMStoG2_CellDataBound(sender As Object, e As PivotGridCellDataBoundEventArgs) Handles pvtCMStoG2.CellDataBound 'Process the cell formats as needed. If TypeOf (e.Cell) Is PivotGridDataCell Then 'Get a reference to the cell. Dim cell As PivotGridDataCell = TryCast(e.Cell, PivotGridDataCell) If cell.CellType = PivotGridDataCellType.DataCell Then 'Check for valid format before proceeding. If String.IsNullOrEmpty(cell.DataItem) = False Then Select Case cell.ParentColumnIndexes(0).ToString Case "Difference" 'Get the current value. Dim quantity As Double = Convert.ToDouble(cell.DataItem) 'Conditionally set the format. If quantity > 0 Then cell.BackColor = Color.LightGreen cell.ForeColor = Color.Green ElseIf quantity < 0 Then cell.BackColor = ColorTranslator.FromHtml("#FF7373") cell.ForeColor = Color.White End If Case "Last Billing File" cell.BackColor = Color.LightYellow End Select End If ElseIf cell.CellType = PivotGridDataCellType.RowTotalDataCell OrElse cell.CellType = PivotGridDataCellType.ColumnTotalDataCell Then 'Check for valid format before proceeding. If String.IsNullOrEmpty(cell.DataItem) = False Then Select Case cell.ParentColumnIndexes(0).ToString Case "Difference" If cell.DataItem.ToString().Length > 0 Then 'Get the current value. Dim quantity As Double = Convert.ToDouble(cell.DataItem) 'Conditionally set the format. If quantity > 0 Then cell.BackColor = Color.LightGreen cell.ForeColor = Color.Green cell.Font.Bold = True ElseIf quantity < 0 Then cell.BackColor = ColorTranslator.FromHtml("#FF7373") cell.ForeColor = Color.White cell.Font.Bold = True End If End If Exit Select End Select End If ElseIf cell.CellType = PivotGridDataCellType.RowGrandTotalDataCell OrElse cell.CellType = PivotGridDataCellType.ColumnGrandTotalDataCell Then 'Check for valid format before proceeding. If cell.ParentColumnIndexes(0) IsNot Nothing AndAlso String.IsNullOrEmpty(cell.ParentColumnIndexes(0).ToString) = False Then Select Case cell.ParentColumnIndexes(0).ToString Case "Difference" 'Get the current value. Dim quantity As Double = Convert.ToDouble(cell.DataItem) 'Conditionally set the format. If quantity > 0 Then cell.BackColor = Color.Green cell.ForeColor = Color.Black cell.Font.Bold = True ElseIf quantity < 0 Then cell.BackColor = Color.Red cell.ForeColor = Color.White cell.Font.Bold = True End If Exit Select End Select End If End If ElseIf TypeOf (e.Cell) Is PivotGridRowHeaderCell Then 'Get a reference to the cell. Dim cell As PivotGridRowHeaderCell = TryCast(e.Cell, PivotGridRowHeaderCell) Select Case cell.Text Case "columnname" cell.Font.Bold = True End Select ElseIf TypeOf (e.Cell) Is PivotGridColumnHeaderCell Then 'Get a reference to the cell. Dim cell As PivotGridColumnHeaderCell = TryCast(e.Cell, PivotGridColumnHeaderCell) Select Case cell.Text Case "Difference" cell.Font.Bold = True cell.Font.Italic = True End Select 'Set the alignment of the cell cell.HorizontalAlign = HorizontalAlign.Center End If End Sub Private Sub pvtCMStoG2_ItemNeedCalculation(sender As Object, e As PivotGridCalculationEventArgs) Handles pvtCMStoG2.ItemNeedCalculation 'Calculate the difference between G2 and CMS hours. If e.GroupName.ToString() = "Difference" Then 'Declare local variables. Dim m_dblCMSValue, m_dblG2Value As Double 'Get the current CMS value. If e.GetAggregateSummaryValue("CMS") IsNot Nothing AndAlso String.IsNullOrEmpty(e.GetAggregateSummaryValue("CMS").GetValue().ToString()) = False Then m_dblCMSValue = Double.Parse(e.GetAggregateSummaryValue("CMS").GetValue().ToString()) Else m_dblCMSValue = 0D End If 'Get the current G2 value. If e.GetAggregateSummaryValue("G2") IsNot Nothing AndAlso String.IsNullOrEmpty(e.GetAggregateSummaryValue("G2").GetValue().ToString()) = False Then m_dblG2Value = Double.Parse(e.GetAggregateSummaryValue("G2").GetValue().ToString()) Else m_dblG2Value = 0D End If 'Calculate the final difference value. e.CalculatedValue = New DoubleAggregateValue(m_dblG2Value - m_dblCMSValue) End If End Sub#End Region#Region "MISCELLANEOUS SUPPORT ROUTINES" 'Private Function CleanNumber(InputString As String) As Integer ' 'Declare local variables. ' Dim m_intReturnValue As Integer ' If String.IsNullOrEmpty(InputString) = False Then ' 'Clean out everything but the numbers ' m_intReturnValue = Convert.ToInt32(Regex.Replace(InputString, "[^\d.]", "", RegexOptions.IgnoreCase Or RegexOptions.Multiline)) ' End If ' 'Return the value. ' Return m_intReturnValue 'End Function#End Region#Region "DATASOURCE EVENT HANDLERS" '''//////////////////////////////////////////////////////////////////////////////////////////////////// ''' <summary> ''' Event handler. Called by ASP.NET SQL Server Datasource Line Item Data Inspection ''' Selecting control (sdsLineItemDataInspection class) for selecting events. ''' </summary> ''' <remarks> ''' Commented by Mike Danielski. ''' </remarks> ''' <param name="sender"> ''' Source of the event. ''' </param> ''' <param name="e"> ''' SQL data source selecting event information. ''' </param> '''//////////////////////////////////////////////////////////////////////////////////////////////////// Private Sub sdsLineItemDataInspection_Selecting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles sqlCMStoG2TimesheetValidation.Selecting 'Cancel the intiial page load select. If Page.IsPostBack = False Then e.Cancel = True End If 'Set the command timeout value to wait indefinitely. e.Command.CommandTimeout = 0 'Address the timesheet ID. If chkSingleTimesheetID.Checked = True Then e.Command.Parameters("@TimesheetID").Value = radTimesheetID.Value Else e.Command.Parameters("@TimesheetID").Value = System.DBNull.Value End If 'Set the date-based parameters. e.Command.Parameters("@BeginDate").Value = ctlBillingPeriodPicker.StartDate e.Command.Parameters("@EndDate").Value = ctlBillingPeriodPicker.EndDate End Sub#End Region#Region "FILE UPLOAD ROUTINES" '''//////////////////////////////////////////////////////////////////////////////////////////////////// ''' <summary> ''' Upl timesheet detail report file uploaded method. ''' </summary> ''' <remarks> ''' Commented by Mike Danielski. ''' </remarks> ''' <param name="sender"> ''' Source of the event. ''' </param> ''' <param name="e"> ''' File uploaded event information. ''' </param> '''//////////////////////////////////////////////////////////////////////////////////////////////////// Private Sub uplTimesheetDetailReportFile_FileUploaded(sender As Object, e As FileUploadedEventArgs) Handles uplTimesheetDetailReportFile.FileUploaded 'Get the full filename. Dim m_strFullFileName As String m_strFullFileName = Server.MapPath(uplTimesheetDetailReportFile.TargetFolder & "\" & e.File.FileName) 'Save the file to the proper location. e.File.SaveAs(m_strFullFileName) 'Remove the first line and resave the file. Call RemoveFileHeaderAndFooter(m_strFullFileName) End Sub '''//////////////////////////////////////////////////////////////////////////////////////////////////// ''' <summary> ''' Remove standard header method. ''' </summary> ''' <remarks> ''' Commented by Mike Danielski. ''' </remarks> ''' <param name="filePath"> ''' Full pathname of the file. ''' </param> '''//////////////////////////////////////////////////////////////////////////////////////////////////// Public Sub RemoveFileHeaderAndFooter(ByVal filePath As String) 'Make sure we have a file. If (String.IsNullOrEmpty(filePath)) Then Return End If 'Get the lines from the file. Dim lines As New List(Of String)(File.ReadAllLines(filePath)) 'Check to see if the line can be removed. If lines.Count > 2 AndAlso lines(0).ToString.StartsWith("Detail Timesheet Report") Then 'Remove the first line only lines.RemoveAt(0) End If 'Remove the last two lines - the footer. lines.RemoveRange(lines.Count - 2, 2) 'Write the modified file back to disk. File.WriteAllLines(filePath, lines.ToArray()) End Sub '''//////////////////////////////////////////////////////////////////////////////////////////////////// ''' <summary> ''' Process CSV using CSV reader method. ''' </summary> ''' <remarks> ''' Commented by Mike Danielski. ''' </remarks> ''' <param name="FileName"> ''' Filename of the file. ''' </param> '''//////////////////////////////////////////////////////////////////////////////////////////////////// Private Sub ProcessCSVUsingCSVReader(FileName As String) 'Open the file Using csv As New CsvReader(New StreamReader(FileName), True) 'Call the method to generate the account numbers. Using dbContext As New EntitiesModel() 'Purge the destination table. dbContext.ExecuteNonQuery("TRUNCATE TABLE reconciliation.tblDetailedTimesheetReport") 'Save Changes dbContext.SaveChanges() 'Process the individual fields. While csv.ReadNextRecord() 'Create a new record Dim m_objNewTimesheetRecord As New reconciliation.DetailedTimesheetReport 'Source column variables to hold CSV content. Dim m_strDate As String = csv("Date") Dim m_strStart As String = csv("Start") Dim m_strEnd As String = csv("End") Dim m_strServiceCode As String = csv("SvcCode").ToUpper Dim m_strTimeEntryID As String = csv("Time Entry Id") Dim m_strClientNumber As String = csv("Client#") Dim m_strDCWPIN As String = csv("DCW PIN") Dim m_strAuthorizationID As String = csv("AuthID") Dim m_strHours As String = csv("Hours") Dim m_strApproved As String = csv("Approved") Dim m_strMCO As String = csv("MCO") Dim m_strAuthorizationName As String = csv("AuthName") Dim m_strAuthorizationNumber As String = csv("AuthNumber") Dim m_strDCW As String = csv("DCW") Dim m_strSC As String = csv("SC") Dim m_strModifiers As String = csv("Modifiers") Dim m_strStatus As String = csv("Status") Dim m_strRegion As String = csv("Region") 'Declare strongly typed destination variables to hold final values. Dim m_intTimesheetID As Integer Dim m_intClientID As Integer Dim m_intPIN As Integer Dim m_intAuthorizationID As Integer Dim m_decHours As Decimal Dim m_datServiceStarted As Date Dim m_datServiceEnded As Date Dim m_datApprovedDate As Date Dim m_strDCWFirstName As String = String.Empty Dim m_strDCWLastName As String = String.Empty 'Assign TimesheetID If Integer.TryParse(m_strTimeEntryID, m_intTimesheetID) = False Then Throw New Exception("A 'Time Entry Id' value in the uploaded file is not valid.") End If 'ClientID If Integer.TryParse(m_strClientNumber, m_intClientID) = False Then Throw New Exception("A 'Client#' value in the uploaded file is not valid.") End If 'PIN If Integer.TryParse(m_strDCWPIN, m_intPIN) = False Then Throw New Exception("A 'DCW PIN' value in the uploaded file is not valid.") End If 'Authorization ID. If Integer.TryParse(m_strAuthorizationID, m_intAuthorizationID) = False Then Throw New Exception("The Authorization ID value in the uploaded file is not valid.") End If 'Hours. If Decimal.TryParse(m_strHours, m_decHours) = False Then Throw New Exception("The Hours value in the uploaded file is not valid.") End If 'Calculate start date. If String.IsNullOrEmpty(m_strDate) = False AndAlso String.IsNullOrEmpty(m_strStart) = False Then If Date.TryParse(m_strDate & " " & m_strStart, m_datServiceStarted) = False Then 'm_datServiceStarted = Convert.ToDateTime(m_strDate & " " & m_strStart) Throw New Exception("The service start date and time value in the uploaded file is not valid.") End If End If 'Calculate end date If String.IsNullOrEmpty(m_strDate) = False AndAlso String.IsNullOrEmpty(m_strEnd) = False Then If Date.TryParse(m_strDate & " " & m_strEnd, m_datServiceEnded) = False Then 'm_datServiceEnded = Convert.ToDateTime(m_strDate & " " & m_strEnd) Throw New Exception("The service end date and time value in the uploaded file is not valid.") End If End If 'Approval date If Date.TryParse(m_strApproved, m_datApprovedDate) = False Then Throw New Exception("The approved date value in the uploaded file is not valid.") End If 'Clean the service code. Select Case m_strServiceCode Case String.Empty m_strServiceCode = String.Empty Case "PENDING" m_strServiceCode = m_strServiceCode Case "COMP" m_strServiceCode = m_strServiceCode Case Else m_strServiceCode = Left(m_strServiceCode, 3) End Select 'Parse the name If String.IsNullOrEmpty(m_strDCW) = False Then m_strDCWFirstName = StrConv(m_strDCW.ToString.Split(" ")(0), vbProperCase) m_strDCWLastName = StrConv(m_strDCW.ToString.Split(" ")(1), vbProperCase) End If 'Set the properties. With m_objNewTimesheetRecord 'Integer fields. .TimesheetID = m_intTimesheetID .ClientID = m_intClientID .PIN = m_intPIN .AuthorizationID = m_intAuthorizationID 'Decimal fields. .Hours = m_decHours 'Date fields .ServiceStarted = m_datServiceStarted .ServiceEnded = m_datServiceEnded .ApprovedDate = m_datApprovedDate 'String fields. .Agency = IIf(String.IsNullOrEmpty(m_strMCO), String.Empty, m_strMCO) .AuthorizationName = StrConv(m_strAuthorizationName, vbProperCase) .AuthorizationNumber = IIf(String.IsNullOrEmpty(m_strAuthorizationNumber), String.Empty, m_strAuthorizationNumber) .ServiceCode = m_strServiceCode .DCWFirstName = m_strDCWFirstName .DCWLastName = m_strDCWLastName .ServiceCoordinator = m_strSC .Modifiers = m_strModifiers .Status = m_strStatus .Region = m_strRegion End With 'Add the new record. dbContext.Add(m_objNewTimesheetRecord) End While 'Save Changes dbContext.SaveChanges() End Using End Using End Sub Private Sub RetrieveStatistics() 'Compute the earliest and latest dates in the file. Using dbContext As New EntitiesModel() '--------- CMS REPORT Data -------------------------------------------------------------------------------------------------- 'Get the first billing file record. Dim CMSReportResults = (From item In dbContext.DetailedTimesheetReports Order By item.ServiceStarted Ascending) 'Get the first imported record. Dim CMSReportFirstResult = (From item In dbContext.DetailedTimesheetReports Order By item.ServiceStarted Ascending).FirstOrDefault 'Get the last record. Dim CMSReportLastResult = (From item In dbContext.DetailedTimesheetReports Order By item.ServiceStarted Ascending).LastOrDefault 'Declare local variables. Dim m_intCMSReportRecordCount As Integer = CMSReportResults.Count 'Assign content to labels. lblCMSReportRecordCount.Text = m_intCMSReportRecordCount.ToString("N0") If CMSReportFirstResult IsNot Nothing AndAlso CMSReportLastResult IsNot Nothing Then lblCMSReportStartDate.Text = CMSReportFirstResult.ServiceStarted lblCMSReportEndDate.Text = CMSReportLastResult.ServiceEnded lblCMSReportFirstTimesheetID.Text = CMSReportFirstResult.TimesheetID lblCMSReportLastTimesheetID.Text = CMSReportLastResult.TimesheetID 'Set the values into session. Session("BillingFileStartDate") = CMSReportFirstResult.ServiceStarted Session("BillingFileEndDate") = CMSReportLastResult.ServiceEnded Else lblCMSReportStartDate.Text = "?" lblCMSReportEndDate.Text = "?" lblCMSReportFirstTimesheetID.Text = "?" lblCMSReportLastTimesheetID.Text = "?" End If '--------- BILLING FILE Data -------------------------------------------------------------------------------------------------- 'Get the first Billing File record. Dim LatestBillingFileImportResults = (From item In dbContext.Timesheets Order By item.StartDate Ascending) 'Get the first Billing File record. Dim LatestBillingFileImportFirstResult = (From item In dbContext.Timesheets Order By item.StartDate Ascending).FirstOrDefault 'Get the last Billing File record. Dim LatestBillingFileImportLastResult = (From item In dbContext.Timesheets Order By item.StartDate Ascending).LastOrDefault 'Declare local variables. Dim m_intLatestBillingFileImportRecordCount As Integer = LatestBillingFileImportResults.Count 'Assign content to labels. lblLatestBillingFileImportRecordCount.Text = m_intLatestBillingFileImportRecordCount.ToString("N0") 'Process the results. If LatestBillingFileImportFirstResult IsNot Nothing AndAlso LatestBillingFileImportLastResult IsNot Nothing Then lblLatestBillingFileImportStartDate.Text = LatestBillingFileImportFirstResult.StartDate lblLatestBillingFileImportEndDate.Text = LatestBillingFileImportLastResult.EndDate lblLatestBillingFileImportFirstTimesheetID.Text = LatestBillingFileImportFirstResult.TimeSheetId lblLatestBillingFileImportLastTimesheetID.Text = LatestBillingFileImportLastResult.TimeSheetId 'Store the date ranges in the session. Session("BillingFileStartDate") = LatestBillingFileImportFirstResult.StartDate Session("BillingFileEndDate") = LatestBillingFileImportLastResult.EndDate Else lblLatestBillingFileImportStartDate.Text = "?" lblLatestBillingFileImportEndDate.Text = "?" lblLatestBillingFileImportFirstTimesheetID.Text = "?" lblLatestBillingFileImportLastTimesheetID.Text = "?" End If '--------- G2 Data -------------------------------------------------------------------------------------------------- 'Calculate the proper range of dates that should be pulled from G2, based on smallest overlapping window of imported data. Dim m_datG2BeginDate As Date Dim m_datG2EndDate As Date 'Perform different analysis depending on whether last import was to be included. If chkIncludeLastImport.Checked Then If LatestBillingFileImportFirstResult IsNot Nothing AndAlso CMSReportFirstResult IsNot Nothing Then 'Calculate the start of the period. If LatestBillingFileImportFirstResult.StartDate > CMSReportFirstResult.ServiceStarted Then m_datG2BeginDate = CMSReportFirstResult.ServiceStarted Else m_datG2BeginDate = LatestBillingFileImportFirstResult.StartDate End If 'Calculate the end of the period. If LatestBillingFileImportLastResult.EndDate > CMSReportLastResult.ServiceEnded Then m_datG2EndDate = CMSReportLastResult.ServiceEnded Else m_datG2EndDate = LatestBillingFileImportLastResult.EndDate End If Else 'Get the values from the period picker. m_datG2BeginDate = ctlBillingPeriodPicker.StartDate m_datG2EndDate = ctlBillingPeriodPicker.EndDate End If Else 'Copy dates from CMS data since there is nothing else to compare to. m_datG2BeginDate = LatestBillingFileImportFirstResult.StartDate m_datG2EndDate = LatestBillingFileImportLastResult.StartDate End If If m_datG2BeginDate <> #12:00:00 AM# AndAlso m_datG2EndDate <> #12:00:00 AM# Then 'Get the first G2 record. Dim G2Results = (From item In dbContext.LineItems Where item.ServiceStarted >= m_datG2BeginDate And item.ServiceEnded <= m_datG2EndDate Order By item.ServiceStarted Ascending) 'Get the first imported record. Dim FirstG2Result = (From item In dbContext.LineItems Where item.ServiceStarted >= m_datG2BeginDate And item.ServiceEnded <= m_datG2EndDate Order By item.ServiceStarted Ascending).FirstOrDefault 'Get the last record. Dim LastG2Result = (From item In dbContext.LineItems Where item.ServiceStarted >= m_datG2BeginDate And item.ServiceEnded <= m_datG2EndDate Order By item.ServiceStarted Ascending).LastOrDefault 'Declare local variables. Dim m_intG2RecordCount As Integer = G2Results.Count 'Assign content to labels. lblG2RecordCount.Text = m_intG2RecordCount.ToString("N0") 'Set the date ranges lblG2StartDate.Text = m_datG2BeginDate lblG2EndDate.Text = m_datG2EndDate 'Process the final results. If FirstG2Result IsNot Nothing AndAlso LastG2Result IsNot Nothing Then lblFirstG2TimesheetID.Text = FirstG2Result.SourceKey lblLastG2TimesheetID.Text = LastG2Result.SourceKey 'Set the values into session. Session("EarliestG2Date") = m_datG2BeginDate Session("LatestG2Date") = m_datG2EndDate Else lblFirstG2TimesheetID.Text = "?" lblLastG2TimesheetID.Text = "?" End If Else lblG2StartDate.Text = "?" lblG2EndDate.Text = "?" lblG2RecordCount.Text = "0" lblFirstG2TimesheetID.Text = "?" lblLastG2TimesheetID.Text = "?" End If ''DEBUG DATA. 'Session("BillingFileStartDate") = #2/20/2015# 'Session("BillingFileEndDate") = #2/28/2015# 'Session("EarliestBillingFileDate") = #2/1/2015# 'Session("LatestBillingFileDate") = #2/7/2015# 'Session("EarliestG2Date") = #2/27/2015# 'Session("LatestG2Date") = #3/5/2015# End Using End Sub#End Region#Region "CALENDAR EVENTS" Private Sub datCMSReport_DayRender(sender As Object, e As Telerik.Web.UI.Calendar.DayRenderEventArgs) Handles datCMSReport.DayRender ''Prepare the cell for "tooltipifying". 'e.Cell.Attributes.Add("ID", e.Day.[Date].ToString()) 'RadToolTipManager1.TargetControls.Add(e.Cell.Attributes("ID"), True) 'Only perform this process if there are values to work with. If Session("BillingFileStartDate") IsNot Nothing AndAlso Session("BillingFileEndDate") IsNot Nothing Then 'For Each row As Data.DataRow In dt.Rows Dim IsInMonth As Boolean = e.Day.Date.Month = e.View.MonthStartDate.Month 'Check if the current date format should be changed If (e.Day.Date >= Convert.ToDateTime(Session("BillingFileStartDate")) And e.Day.Date <= Convert.ToDateTime(Session("BillingFileEndDate"))) And IsInMonth Then e.Cell.Style("background-color") = pc_strRelevantBackgroundCellColor 'Get a reference to the cell itself. Dim cell As TableCell = e.Cell 'Set the properties cell.CssClass = "Appointment" cell.Attributes.Add("id", "datG2Timesheet_" + ID.ToString()) 'Add the control to the collection RadToolTipManager2.TargetControls.Add(e.Cell.Attributes("id"), ID.ToString(), True) End If End If End Sub Private Sub datLatestBillingFileImport_DayRender(sender As Object, e As Telerik.Web.UI.Calendar.DayRenderEventArgs) Handles datLatestBillingFileImport.DayRender ''Prepare the cell for "tooltipifying". 'e.Cell.Attributes.Add("ID", e.Day.[Date].ToString()) 'RadToolTipManager1.TargetControls.Add(e.Cell.Attributes("ID"), True) 'Only perform this process if there are values to work with. If Session("BillingFileStartDate") IsNot Nothing AndAlso Session("BillingFileEndDate") IsNot Nothing Then 'For Each row As Data.DataRow In dt.Rows Dim IsInMonth As Boolean = e.Day.Date.Month = e.View.MonthStartDate.Month 'Check if the current date format should be changed If (e.Day.Date >= Convert.ToDateTime(Session("BillingFileStartDate")) And e.Day.Date <= Convert.ToDateTime(Session("BillingFileEndDate"))) And IsInMonth Then e.Cell.Style("background-color") = pc_strRelevantBackgroundCellColor 'Get a reference to the cell itself. Dim cell As TableCell = e.Cell 'Set the properties cell.CssClass = "Appointment" cell.Attributes.Add("id", "datG2Timesheet_" + ID.ToString()) 'Add the control to the collection RadToolTipManager2.TargetControls.Add(e.Cell.Attributes("id"), ID.ToString(), True) End If End If End Sub Private Sub datG2Timesheet_DayRender(sender As Object, e As Telerik.Web.UI.Calendar.DayRenderEventArgs) Handles datG2Timesheet.DayRender ''Prepare the cell for "tooltipifying". 'e.Cell.Attributes.Add("ID", e.Day.[Date].ToString()) 'RadToolTipManager1.TargetControls.Add(e.Cell.Attributes("ID"), True) 'Only perform this process if there are values to work with. If Session("EarliestG2Date") IsNot Nothing AndAlso Session("LatestG2Date") IsNot Nothing Then 'For Each row As Data.DataRow In dt.Rows Dim IsInMonth As Boolean = e.Day.Date.Month = e.View.MonthStartDate.Month 'Check if the current date format should be changed If (e.Day.Date >= Convert.ToDateTime(Session("EarliestG2Date")) And e.Day.Date <= Convert.ToDateTime(Session("LatestG2Date"))) And IsInMonth Then e.Cell.Style("background-color") = pc_strRelevantBackgroundCellColor 'Get a reference to the cell itself. Dim cell As TableCell = e.Cell 'Set the properties cell.CssClass = "Appointment" cell.Attributes.Add("id", "datG2Timesheet_" + ID.ToString()) 'Add the control to the collection RadToolTipManager2.TargetControls.Add(e.Cell.Attributes("id"), ID.ToString(), True) End If End If End Sub Private Sub RadToolTipManager2_AjaxUpdate(sender As Object, e As ToolTipUpdateEventArgs) Handles RadToolTipManager2.AjaxUpdate 'Create a reference to the child control that will be oaded dynamically. Dim ctlTimeForTheDay As TimeForDay = DirectCast(Me.LoadControl("TimeForDay.ascx"), TimeForDay) 'Set the control properties. ctlTimeForTheDay.ID = "ctlTimeForDay" ctlTimeForTheDay.TargetDate = DateTime.Parse(e.Value) 'Add the control to the collection. e.UpdatePanel.ContentTemplateContainer.Controls.Add(ctlTimeForTheDay) End Sub#End RegionEnd Class