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

[Solved] HELP! Upgrade Issues

2 Answers 272 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
avarndel
Top achievements
Rank 1
avarndel asked on 01 May 2008, 04:00 PM
I've upgraded our telerik controls to the AJAX version.  However,  I've noticed that the performance is slower.  Is there something I'm doing wrong?

The RadScriptLibrary is being loaded from the MasterPage.master

Here is an example of the aspx and aspx.vb pages

ASPX:
<%--<%@ Page Language="VB" AutoEventWireup="false" CodeFile="ProposalRequest.aspx.vb" Inherits="Requests_ProposalRequest" %>
--%>
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="ProposalRequest.aspx.vb" Inherits="Requests_ProposalRequest" title="Request" %>
<%@ MasterType VirtualPath="~/MasterPage.master" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Project Request</title>
</head>
<body>
    <form id="form1" runat="server">--%>
   
        <asp:Content ID="Content1" Runat="Server" ContentPlaceHolderID="ContentPlaceHolder1">
       
<script type="text/javascript">
       var  needToConfirm = false;
      window.onbeforeunload = confirmExit;
     
        function confirmExit()
        {
          if  (needToConfirm)
            {
             return "Changes will be lost if you don’t click on the  ‘Save’-button";
            }
        }
   
        function DatePicker_OnDateSelected(pickerInstance, args)
        {
            needToConfirm = true;
        }
       
        function ResetConfirmVar()
        {
            needToConfirm = true;
        }
   
    </script>
<asp:Label ID="lblEditStatus" runat="server" CssClass="editstatus"></asp:Label><br />
    <div>
    <asp:Button ID="btnSaveDraft" runat="server" CssClass="mybutton" Text="Save Draft" ValidationGroup="Top" />
        <asp:Button ID="btnSubmit" runat="server" CssClass="mybutton" Text="Submit" />
    <asp:Button ID="btnCalculateRates" runat="server" CssClass="mybutton" Text="Recalculate Rates" />
        <asp:Button ID="btnApprove" runat="server" CssClass="mybutton" Text="Approve" />
        <asp:Button ID="btnDeclined" runat="server" CssClass="mybutton" Text="Decline" />
        <br />
        <asp:Label ID="lblErrorMessage" runat="server" CssClass="errormessage" Text=""></asp:Label><br />
        <table border="0" cellpadding="0" cellspacing="3">
            <tr>
                <td class="fieldlabeltext">
                    Request Status:</td>
                <td class="emptycell">
                </td>
                <td>
                    <asp:Label ID="txtRequestStatus" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
                <td class="fieldlabeltext">
                    Project Number:</td>
                <td class="emptycell">
                </td>
                <td>
                    <Telerik:radcombobox id="ddlJobNumber" runat="server" skin="Office2007"
                        DataSourceID="SDSJobNumbers" 
                        Width="150px" Height="100px"
                        DataTextField="Project" DataValueField="Project" MarkFirstMatch="True"
                        AppendDataBoundItems="true">
                        <Items>
                        <Telerik:RadComboBoxItem Text="-Select One-" Value="0" /></Items>

<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
                    </Telerik:radcombobox>
                     <asp:Label ID="lblJobNumber" runat="server" Text=""></asp:Label>
                </td>
            </tr>
            <tr>
                <td class="fieldlabeltextrequired">
                    Project Name:</td>
                <td class="emptycell">
                </td>
                <td>
                    <Telerik:RadTextBox ID="txtProjectName" runat="server" CssClass="fielddatatext" ValidationGroup="Top" ClientEvents-OnValueChanged="ResetConfirmVar" MaxLength="29" >
                        <ClientEvents OnValueChanged="ResetConfirmVar" />
                    </Telerik:RadTextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator8" runat="server" ControlToValidate="txtProjectName"
                        ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
                <td class="fieldlabeltext">
                </td>
                <td class="emptycell">
                </td>
                <td>
                </td>
            </tr>
            <tr>
                <td class="fieldlabeltextrequired">
                    Cost Center:</td>
                <td class="emptycell">
                </td>
                <td>
                    <Telerik:radcombobox id="ddlCostCenterNames" runat="server"
                        datasourceid="SDSCostCenters" datatextfield="CostCenter" AppendDataBoundItems="true"
                        datavaluefield="ID" skin="Office2007"  ValidationGroup="Top" >
                        <Items><Telerik:RadComboBoxItem Text="- Select One -" /></Items>

<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
                    </Telerik:radcombobox>
                    <%--<asp:DropDownList ID="ddlCostCenterNames" runat="server" DataSourceID="SDSCostCenters"
                    DataTextField="CostCenter" DataValueField="ID" AppendDataBoundItems="true" ValidationGroup="Top" AutoPostBack="true">
                    <asp:ListItem Text="- Select One -" Value="0"></asp:ListItem>
                </asp:DropDownList>--%>
                    <asp:RequiredFieldValidator ID="RFVCostCenterNames" runat="server" ControlToValidate="ddlCostCenterNames"
                        ErrorMessage="*" InitialValue="- Select One -" ValidationGroup="Top"></asp:RequiredFieldValidator>
                </td>
                <td class="fieldlabeltext">
                    Total Fees:</td>
                <td class="emptycell">
                </td>
                <td>
                    <asp:Label ID="lblFeesTotal" runat="server" CssClass="fieldlabeldata"></asp:Label>
                    <asp:LinkButton ID="btnRefresh" runat="server" CausesValidation="False" CssClass="selectbuttons">Refresh</asp:LinkButton>
                    </td>
                   
                   
            </tr>
            <tr>
                <td class="fieldlabeltextrequired" style="height: 39px">
                    Client Name:</td>
                <td class="emptycell" style="height: 39px">
                </td>
                <td>
                    <Telerik:radcombobox id="ddlClientName" runat="server" datasourceid="sdsCustomer" Width="200px" Height="100px"
                        datatextfield="Name" datavaluefield="CustId"
                        skin="Office2007"
                        tooltip="select client name" AppendDataBoundItems="true"
                        AllowCustomText="False" MarkFirstMatch="True" ValidationGroup="Top">
                        <Items><Telerik:RadComboBoxItem Text="- Select One -" /></Items>
                    </Telerik:radcombobox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="ddlClientName"
                        ErrorMessage="*" Width="1px" InitialValue="- Select One -" ValidationGroup="Top"></asp:RequiredFieldValidator>
                    &nbsp;</td>
                <td class="fieldlabeltext" style="height: 39px">
                    Total Costs:</td>
                <td class="emptycell" style="height: 39px">
                </td>
                <td>
                    <asp:Label ID="lblCostsTotal" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
            </tr>
            <tr>
                <td class="fieldlabeltextrequired">
                    &nbsp;Projected Billings:</td>
                <td class="emptycell">
                </td>
                <td>
                    <Telerik:RadNumericTextBox ID="numBillings" runat="server" Culture="English (United States)"
                        EmptyMessage="Enter billings"
                        MaxValue="70368744177664" MinValue="-70368744177664" CssClass="fielddatatext" ToolTip="Enter projected billings"
                        Type="Currency" ValidationGroup="Top" ClientEvents-OnValueChanged="ResetConfirmVar" >
                        <NumberFormat DecimalDigits="0" />
                       
                    </Telerik:RadNumericTextBox>
                    &nbsp;
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="numBillings"
                        ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
                <td class="fieldlabeltext">
                    Total Freelance Costs:</td>
                <td class="emptycell">
                </td>
                <td>
                    <asp:Label ID="lblTotalFreelanceFees" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
            </tr>
            <tr>
                <td class="fieldlabeltextrequired" style="height: 25px">
                    &nbsp;Projected Revenue:</td>
                <td class="emptycell" style="height: 25px">
                </td>
                <td>
                    <Telerik:RadNumericTextBox ID="numRevenue" runat="server" Culture="English (United States)"
                        EmptyMessage="Enter revenue" Font-Names="Arial" Font-Size="11px" LabelCssClass="radLabelCss_JMW"
                        MaxLength="25" MaxValue="70368744177664" MinValue="-70368744177664" CssClass="fielddatatext"
                        ToolTip="Enter projected revenue" Type="Currency" ClientEvents-OnValueChanged="ResetConfirmVar" >
                        <NumberFormat DecimalDigits="0" />
                    </Telerik:RadNumericTextBox>
                    &nbsp;
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="numRevenue"
                        ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
                <td class="fieldlabeltext" style="height: 25px">
                    Total 3rd Party Cost:</td>
                <td class="emptycell" style="height: 25px">
                </td>
                <td>
                    <asp:Label ID="lblThirdParty" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
            </tr>
            <tr>
                <td class="fieldlabeltextrequired">
                    Rate Card:</td>
                <td class="emptycell">
                </td>
                <td>
                   <Telerik:radcombobox id="ddlRateCard" runat="server" datasourceid="sdsRateCards" ValidationGroup="Top"
                        datatextfield="code_value_desc" datavaluefield="rate_table_id"
                        skin="Office2007" AppendDataBoundItems="true">
                        <Items><Telerik:RadComboBoxItem Text="- Select One -" /></Items>

<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
                    </Telerik:radcombobox>
                    <%-- <asp:DropDownList ID="ddlRateCard" runat="server" DataSourceID="sdsRateCards"
                    DataTextField="code_value_desc" DataValueField="rate_table_id" AppendDataBoundItems="true" ValidationGroup="Top">
                    <asp:ListItem Text="- Select One -" Value="0"></asp:ListItem>
                </asp:DropDownList>--%>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" ControlToValidate="ddlRateCard"
                        ErrorMessage="*" Height="1px" Width="1px" InitialValue="- Select One -" ValidationGroup="Top"></asp:RequiredFieldValidator>
                </td>
                <td class="fieldlabeltext">
                    % of 3rd Party Costs to Revenue:</td>
                <td class="emptycell">
                </td>
                <td>
                    <asp:Label ID="lblThirdPartyRev" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
            </tr>
            <tr>
                <td class="fieldlabeltextrequired" style="height: 28px">
                    Rate Effective Date:</td>
                <td class="emptycell" style="height: 28px">
                </td>
                <td>
                    <Telerik:raddatepicker id="dteRateEffectiveDate" runat="server" culture="English (United States)"
                       font-names="Arial" font-size="11px" mindate="" Skin="Office2007" >
                       <DATEINPUT Skin="Office2007" ValidationGroup="Top" />
                         <ClientEvents OnDateSelected="DatePicker_OnDateSelected" />
                       <CALENDAR runat="server" Skin="Office2007" CssClass="fieldlabeldata" />

<DatePopupButton CssClass="radPopupImage_Office2007"></DatePopupButton>
                       </Telerik:raddatepicker>
                          <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="dteRateEffectiveDate"
                        ErrorMessage="*" ValidationGroup="Top" ></asp:RequiredFieldValidator>
                    <br />
                    <br />
                </td>
                <td class="fieldlabeltext">
                    % not to Exceed</td>
                <td class="emptycell">
                </td>
                <td>
                    <asp:Label ID="lblExceed" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
            </tr>
            <tr>
                <td class="fieldlabeltext">
                    This is a No Bid</td>
                <td class="emptycell">
                </td>
                <td>
                    <asp:CheckBox ID="chkNoBid" runat="server" CssClass="fieldlabeldata" /></td>
                <td class="fieldlabeltext">
                    Costs not to Exceed:</td>
                <td class="emptycell">
                </td>
                <td>
                    <asp:Label ID="lblCostsExceed" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
            </tr>
            <tr>
                <td class="fieldlabeltextrequired">
                    Expected Start Date:</td>
                <td class="emptycell">
                </td>
                <td>
                    <Telerik:raddatepicker id="dteExpectedStartDte" runat="server" cssclass="fieldlabeldata"
                       tooltip="Select start date" Skin="Office2007">
                          <ClientEvents OnDateSelected="DatePicker_OnDateSelected" />
                       <DATEINPUT Skin="Office2007" CssClass="fieldlabeldata" Font-Names="Arial"
                             Font-Size="11px" DateFormat="MM/dd/yyyy" ValidationGroup="Top"
                             LabelCssClass="radLabelCss_Office2007" />
                        <CALENDAR runat="server"
                         Skin="Office2007" CssClass="fieldlabeldata" />

<DatePopupButton CssClass="radPopupImage_Office2007"></DatePopupButton>
                    </Telerik:raddatepicker>
                    &nbsp;
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ControlToValidate="dteExpectedStartDte"
                        ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator>
                </td>
                <td class="fieldlabeltext">
                </td>
                <td class="emptycell">
                </td>
                <td>
                </td>
            </tr>
            <tr>
                <td class="fieldlabeltextrequired">
                    Expected End Date:</td>
                <td class="emptycell">
                </td>
                <td>
                    <Telerik:raddatepicker id="dteExpectedEndDte" runat="server" cssclass="fieldlabeldata"
                       tooltip="Select end date" Skin="Office2007">
                         <ClientEvents OnDateSelected="DatePicker_OnDateSelected" />
                        <DATEINPUT Skin="Office2007" CssClass="fieldlabeldata" Font-Names="Arial"
                             Font-Size="11px" DateFormat="MM/dd/yyyy" ValidationGroup="Top"
                             LabelCssClass="radLabelCss_Office2007" />
                        <CALENDAR runat="server" Skin="Office2007" CssClass="fieldlabeldata" />

<DatePopupButton CssClass="radPopupImage_Office2007"></DatePopupButton>
                    </Telerik:raddatepicker>
                    &nbsp;
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator6" runat="server" ControlToValidate="dteExpectedEndDte"
                        ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
                <td class="fieldlabeltext">
                </td>
                <td class="emptycell">
                </td>
                <td>
                </td>
            </tr>
            <tr>
                <td class="fieldlabeltext" >
                    Description:</td>
                <td class="emptycell" >
                </td>
                <td colspan="4">
                    <Telerik:RadTextBox ID="txtDescription" runat="server"
                        BorderWidth="1px" Columns="60" CssClass="fieldlabeldata" EmptyMessage="Enter description"
                        Font-Names="Arial" Font-Size="11px" MaxLength="99" Skin="Office2007" ClientEvents-OnValueChanged="ResetConfirmVar" Height="15px" Width="100%" >
                        <EmptyMessageStyle Font-Names="Arial,verdana" />
                        <ClientEvents OnValueChanged="ResetConfirmVar" />
                    </Telerik:RadTextBox></td>
            </tr>
            <tr>
                <td class="fieldlabeltext">
                    Approved By:</td>
                <td class="emptycell">
                </td>
                <td style="width: 179px">
                    <asp:Label ID="lblApprovedName" runat="server"></asp:Label></td>
                <td class="fieldlabeltext">
                    Approved Date:</td>
                <td class="emptycell">
                </td>
                <td class="emptycell">
                    <asp:Label ID="lblApprovedDte" runat="server"></asp:Label></td>
            </tr>
            <tr>
                <td class="fieldlabeltext">
                    <asp:Label ID="lblDecline" runat="server" CssClass="fieldlabeltextrequired" Text="Decline Reason:"></asp:Label></td>
                <td class="emptycell">
                </td>
                <td colspan="4">
                    <Telerik:RadTextBox ID="txtDeclineReason" runat="server" BorderColor="#93ADC7" BorderStyle="Solid"
                        BorderWidth="1px" Columns="60" CssClass="fieldlabeldata" EmptyMessage="Enter reason"
                        Font-Names="Arial" Font-Size="11px" MaxLength="29" Skin="Office2007" Rows="2" ClientEvents-OnValueChanged="ResetConfirmVar" Width="100%" >
                        <EmptyMessageStyle Font-Names="Arial,verdana" />
                        <ClientEvents OnValueChanged="ResetConfirmVar" />
                    </Telerik:RadTextBox></td>
            </tr>
        </table>
        <br />
        <Telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" EnablePageHeadUpdate="False">
            <AjaxSettings>
                <%--<radA:AjaxSetting AjaxControlID="btnSaveDraft">
                    <UpdatedControls>
                        <radA:AjaxUpdatedControl ControlID="ddlJobNumber" />
                        <radA:AjaxUpdatedControl ControlID="txtProjectName" />
                        <radA:AjaxUpdatedControl ControlID="RequiredFieldValidator8" />
                        <radA:AjaxUpdatedControl ControlID="ddlCostCenterNames" />
                        <radA:AjaxUpdatedControl ControlID="RFVCostCenterNames" />
                        <radA:AjaxUpdatedControl ControlID="ddlClientName" />
                        <radA:AjaxUpdatedControl ControlID="RequiredFieldValidator4" />
                        <radA:AjaxUpdatedControl ControlID="numBillings" />
                        <radA:AjaxUpdatedControl ControlID="RequiredFieldValidator1" />
                        <radA:AjaxUpdatedControl ControlID="numRevenue" />
                        <radA:AjaxUpdatedControl ControlID="RequiredFieldValidator2" />
                        <radA:AjaxUpdatedControl ControlID="ddlRateCard" />
                        <radA:AjaxUpdatedControl ControlID="RequiredFieldValidator7" />
                        <radA:AjaxUpdatedControl ControlID="dteRateEffectiveDate" />
                        <radA:AjaxUpdatedControl ControlID="RequiredFieldValidator3" />
                        <radA:AjaxUpdatedControl ControlID="chkNoBid" />
                        <radA:AjaxUpdatedControl ControlID="dteExpectedStartDte" />
                        <radA:AjaxUpdatedControl ControlID="RequiredFieldValidator5" />
                        <radA:AjaxUpdatedControl ControlID="dteExpectedEndDte" />
                        <radA:AjaxUpdatedControl ControlID="RequiredFieldValidator6" />
                        <radA:AjaxUpdatedControl ControlID="txtDescription" />
                    </UpdatedControls>
                </radA:AjaxSetting>--%>
                <Telerik:AjaxSetting AjaxControlID="btnRefresh">
                    <UpdatedControls>
                        <Telerik:AjaxUpdatedControl ControlID="lblFeesTotal" />
                        <Telerik:AjaxUpdatedControl ControlID="lblCostsTotal" />
                        <Telerik:AjaxUpdatedControl ControlID="lblTotalFreelanceFees" />
                        <Telerik:AjaxUpdatedControl ControlID="lblThirdParty" />
                        <Telerik:AjaxUpdatedControl ControlID="lblThirdPartyRev" />
                        <Telerik:AjaxUpdatedControl ControlID="lblExceed" />
                        <Telerik:AjaxUpdatedControl ControlID="lblCostsExceed" />
                    </UpdatedControls>
                </Telerik:AjaxSetting>
            </AjaxSettings>
        </Telerik:RadAjaxManager>
        <br />
        <br />
        Fees Grid:
        <br />
       <Telerik:RadGrid ID="GridFees" runat="server" AutoGenerateColumns="False" DataSourceID="SDSFeeColumns"  GridLines="None" AllowAutomaticDeletes="True" AllowAutomaticUpdates="True" AllowAutomaticInserts="True" Skin="Office2007" ValidationSettings-ValidationGroup="GridFees">
            <ExportSettings>
                <Pdf PageBottomMargin="" PageFooterMargin="" PageHeaderMargin="" PageHeight="11in"
                    PageLeftMargin="" PageRightMargin="" PageTopMargin="" PageWidth="8.5in" />
            </ExportSettings>
            <MasterTableView DataKeyNames="BgetNodeFeesID" DataSourceID="SDSFeeColumns" EditMode="InPlace" CommandItemDisplay="Top" ShowFooter="True">
                <CommandItemTemplate>
                    <asp:LinkButton ID="InitInsertButton" runat="server" CommandName="InitInsert">
                        <img style="border:0px" alt="" src="..\img\AddRecord.gif" />Add New
                    </asp:LinkButton>
                </CommandItemTemplate>
                <RowIndicatorColumn Visible="False">
                    <HeaderStyle Width="20px" />
                </RowIndicatorColumn>
                <ExpandCollapseColumn Resizable="False" Visible="False">
                    <HeaderStyle Width="20px" />
                </ExpandCollapseColumn>
                 <Columns>
                    <Telerik:GridEditCommandColumn UniqueName="EDITCOLUMN" ButtonType="ImageButton"
                        UpdateImageUrl="..\Img\GridUpdateIcon.gif"
                        EditImageUrl="..\Img\GridEditIcon.gif"
                        CancelImageUrl="..\Img\GridCancelIcon.gif"
                        InsertImageUrl="..\Img\GridUpdateIcon.gif">
                    </Telerik:GridEditCommandColumn>
                    <Telerik:GridClientDeleteColumn UniqueName="DELETECOLUMN"
                        ConfirmText="Delete this row?" ButtonType="ImageButton"
                        ImageUrl="..\Img\GridDeleteIcon.gif" Text="Delete"><HeaderStyle Width="20px" />
                    </Telerik:GridClientDeleteColumn>
                    <Telerik:GridBoundColumn DataField="BgetNodeFeesID" DataType="System.Int64" HeaderText="BgetNodeFeesID"
                        ReadOnly="True" SortExpression="BgetNodeFeesID" UniqueName="BgetNodeFeesID">
                    </Telerik:GridBoundColumn>
                    <Telerik:GridTemplateColumn HeaderText="Include&lt;br/&gt;in Sell" UniqueName="IncludeSell">
                        <ItemTemplate>
                            <asp:CheckBox ID="lblIncludeSell" Runat="server" Checked='<%# Eval("IncludeSell")%>' Enabled="false" />
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:CheckBox ID="IncludeSell" Runat="server" Checked='<%# Bind("IncludeSell") %>'  />
                        </EditItemTemplate>
                         <ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="RoleID" HeaderText="Role" DataField="RoleID">
                        <ItemTemplate>
                            <asp:Label ID="lblRoleID" runat="server" Text='<%# Eval("RoleName")%>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:DropDownList ID="RoleID" runat="server"  
                                DataTextField="code_value_desc" DataValueField="RoleID"
                                SelectedValue='<%# Bind("RoleID") %>'     
                                DataSourceID="SDSRoles" AppendDataBoundItems="true"
                                OnSelectedIndexChanged="FeesRoleID_SelectedIndexChanged" ValidationGroup="GridFees">
                                <asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
                            </asp:DropDownList>
                            <asp:RequiredFieldValidator ID="RFVRoleID" runat="server" ErrorMessage="*" ControlToValidate="RoleID" ValidationGroup="GridFees"></asp:RequiredFieldValidator>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="SourcesID" HeaderText="Source" DataField="SourcesID">
                        <ItemTemplate>
                            <asp:Label ID="lblSourcesID" runat="server" Text='<%# Eval("Sources")%>' ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:DropDownList ID="SourcesID" runat="server"  
                                DataTextField="Sources" DataValueField="SourcesID" SelectedValue='<%# Bind("SourcesID") %>'     
                                DataSourceID="SDSSources" AppendDataBoundItems="true"
                                OnSelectedIndexChanged="FeesSourcesID_SelectedIndexChanged" ValidationGroup="GridFees">
                                <asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
                            </asp:DropDownList>
                            <asp:RequiredFieldValidator ID="RFVSourcesID" runat="server" ErrorMessage="*" ControlToValidate="SourcesID" ValidationGroup="GridFees"></asp:RequiredFieldValidator>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="Resource" HeaderText="Resource" DataField="Resource">
                        <ItemTemplate>
                            <asp:Label ID="lblResource" runat="server" Text='<%# Eval("Resource")%>' ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <Telerik:radTextBox ID="Resource" runat="server" Text='<%# Bind("Resource")%>' Width="50"
                                EnabledStyle-HorizontalAlign="Right">
                                </Telerik:radTextBox>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Left" VerticalAlign="Top"/>
                    </Telerik:GridTemplateColumn>
                   
                    <Telerik:GridTemplateColumn UniqueName="CostCenterID" HeaderText="Cost Center" DataField="CostCenterID">
                        <ItemTemplate>
                            <asp:Label ID="lblCostCenterID" runat="server" Text='<%# Eval("CostCenterName")%>' ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:DropDownList ID="CostCenterID" runat="server" 
                                DataTextField="CostCenter" DataValueField="ID" SelectedValue='<%# Bind("CostCenterID") %>'     
                                DataSourceID="SDSCostCenters" AppendDataBoundItems="true" ValidationGroup="GridFees"
                                OnSelectedIndexChanged="FeesCostCenterID_SelectedIndexChanged">
                                <asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
                            </asp:DropDownList>
                            <asp:RequiredFieldValidator ID="RFVCostCenterID" runat="server" ErrorMessage="*" ControlToValidate="CostCenterID" ValidationGroup="GridFees"></asp:RequiredFieldValidator>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridBoundColumn DataField="Description" HeaderText="Description" SortExpression="Description"
                        UniqueName="Description" MaxLength="29">
                        <ItemStyle VerticalAlign="Top" />
                    </Telerik:GridBoundColumn>
                    <Telerik:GridTemplateColumn UniqueName="Hours" HeaderText="Hours" DataField="Hours">
                        <ItemTemplate>
                            <asp:Label ID="lblHours" runat="server" Text='<%# Eval("Hours", "{0:N0}" )%>' ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <Telerik:radnumericTextBox ID="Hours" runat="server" Text='<%# Bind("Hours")%>' Width="50"
                                EnabledStyle-HorizontalAlign="Right"  OnTextChanged="FeesHours_SelectedIndexChanged">
                                </Telerik:radnumericTextBox>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                   
                    <Telerik:GridTemplateColumn UniqueName="Contingency" HeaderText="Contingency" DataField="Contingency">
                        <ItemTemplate>
                            <asp:Label ID="lblContingency" runat="server"  Text='<%# Eval("Contingency","{0:0.00} %")%>' ></asp:Label>
                          
                        </ItemTemplate>
                        <EditItemTemplate>
                            <Telerik:radNumericTextBox ID="Contingency" runat="server" Text='<%# Bind("Contingency")%>' Width="50"
                                EnabledStyle-HorizontalAlign="Right"  Type="Percent"  OnTextChanged="FeesContingency_SelectedIndexChanged">
                                <NumberFormat DecimalDigits="2" />
                             </Telerik:radNumericTextBox>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                   
                    <Telerik:GridTemplateColumn UniqueName="TotalHours" HeaderText="Total Hours" DataField="TotalHours">
                        <ItemTemplate>
                            <asp:Label ID="lblTotalHours" runat="server"  ></asp:Label>
                        </ItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="Cost" HeaderText="Cost" DataField="Cost">
                        <ItemTemplate>
                            <asp:Label ID="lblCost" runat="server" Text='<%# Eval("Cost","${0:0.00}")%>' ></asp:Label>
                            <asp:Label ID="lblCostStars" Text="*****" runat="server" Width="50"></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <Telerik:radnumericTextBox ID="Cost" runat="server" Text='<%# Bind("Cost")%>' Width="50"
                                EnabledStyle-HorizontalAlign="Right">
                                </Telerik:radnumericTextBox>
                            <Telerik:radTextBox runat="server" ID="CostStars" Text='<%# Bind("CostStars") %>' Width="50" OnTextChanged="FeesCostStars_TextChanged" AutoPostBack="true">
                            </Telerik:radTextBox>
                            <asp:Label ID="lblCostStars" Text="*****" runat="server" Width="50"></asp:Label>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="SellRate" HeaderText="Sell&lt;br/&gt;Rate" DataField="SellRate">
                        <ItemTemplate>
                            <asp:Label ID="lblSellRate" runat="server" Text='<%# Eval("SellRate", "${0:0.00}")%>' ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                           <%-- <radI:radnumericTextBox ID="SellRate" runat="server" Text='<%# Bind("SellRate")%>' Width="50"
                                EnabledStyle-HorizontalAlign="Right" AutoPostBack="true" OnTextChanged="FeesSellRate_SelectedIndexChanged"></radI:radnumericTextBox>--%>
                                <asp:Label ID="lblSellRate" runat="server" Text='<%# Bind("SellRate")%>' ></asp:Label>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="SubTotal" HeaderText="SubTotal" DataField="SubTotal">
                        <ItemTemplate>
                            <asp:Label ID="lblSubTotal" runat="server"  ></asp:Label>
                        </ItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="Markup" HeaderText="Adj &lt;br/&gt;(MU/MD %)" DataField="Markup">
                        <ItemTemplate>
                            <asp:Label ID="lblMarkup" runat="server" Text='<%# Eval("Markup","{0:0.00} %")%>' ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <Telerik:radnumericTextBox ID="Markup" runat="server" Text='<%# Bind("Markup")%>' Width="50"
                                EnabledStyle-HorizontalAlign="Right" Type="Percent"  OnTextChanged="FeesMarkup_SelectedIndexChanged">
                                <NumberFormat DecimalDigits="2" />
                             </Telerik:radnumericTextBox>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="Total" HeaderText="Total" DataField="Total">
                        <ItemTemplate>
                            <asp:Label ID="lblTotal" runat="server"  ></asp:Label>
                        </ItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                </Columns>
            </MasterTableView>
           <ValidationSettings ValidationGroup="GridFees" />
        </Telerik:RadGrid>
        <br />
        <br />
        Costs Grid:<br />
        <Telerik:RadGrid ID="GridCosts" runat="server" AutoGenerateColumns="False" DataSourceID="SDSCostColumns" GridLines="None" Skin="Office2007" AllowAutomaticDeletes="True" AllowAutomaticInserts="True" AllowAutomaticUpdates="True" ValidationSettings-ValidationGroup="GridCosts">
            <ExportSettings>
                <Pdf PageBottomMargin="" PageFooterMargin="" PageHeaderMargin="" PageHeight="11in"
                    PageLeftMargin="" PageRightMargin="" PageTopMargin="" PageWidth="8.5in" />
            </ExportSettings>
            <MasterTableView DataKeyNames="BgetNodeCostID" DataSourceID="SDSCostColumns" CommandItemDisplay="Top" EditMode="InPlace" ShowFooter="True">
                <CommandItemTemplate>
                    <asp:LinkButton ID="InitInsertButton" runat="server" CommandName="InitInsert"><img style="border:0px" alt="" src="..\img\AddRecord.gif" />Add New</asp:LinkButton>
                </CommandItemTemplate>
                <RowIndicatorColumn Visible="False">
                    <HeaderStyle Width="20px" />
                </RowIndicatorColumn>
                <ExpandCollapseColumn Resizable="False" Visible="False">
                    <HeaderStyle Width="20px" />
                </ExpandCollapseColumn>
                <Columns>
                    <Telerik:GridEditCommandColumn UniqueName="EDITCOLUMN" ButtonType="ImageButton"
                        UpdateImageUrl="..\Img\GridUpdateIcon.gif"
                        EditImageUrl="..\Img\GridEditIcon.gif"
                        CancelImageUrl="..\Img\GridCancelIcon.gif"
                        InsertImageUrl="..\Img\GridUpdateIcon.gif">
                    </Telerik:GridEditCommandColumn>
                    <Telerik:GridClientDeleteColumn UniqueName="DELETECOLUMN" ConfirmText="Delete this row?"
                        ButtonType="ImageButton"
                        ImageUrl="..\Img\GridDeleteIcon.gif" Text="Delete">
                        <HeaderStyle Width="20px" />
                    </Telerik:GridClientDeleteColumn>
                    <Telerik:GridBoundColumn DataField="BgetNodeCostID" DataType="System.Int64" HeaderText="BgetNodeCostID"
                        ReadOnly="True" SortExpression="BgetNodeCostID" UniqueName="BgetNodeCostID">
                    </Telerik:GridBoundColumn>
                      <Telerik:GridTemplateColumn HeaderText="Include&lt;br/&gt;in Sell" UniqueName="IncludeSell">
                        <ItemTemplate>
                            <asp:CheckBox ID="lblIncludeSell" Runat="server" Checked='<%# Eval("IncludeSell")%>' Enabled="false" />
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:CheckBox ID="IncludeSell" Runat="server" Checked='<%# Bind("IncludeSell") %>'  />
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="ActvID" HeaderText="Activity" DataField="ActvID">
                        <ItemTemplate>
                            <asp:Label ID="lblActvID" runat="server" Text='<%# Eval("ActivityName")%>'   ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:DropDownList ID="ActvID" runat="server"
                                DataTextField="code_value_desc" DataValueField="ActvID" SelectedValue='<%# Bind("ActvID") %>'     
                                DataSourceID="SDSActivities" AppendDataBoundItems="true"
                                OnSelectedIndexChanged="CostsActivityID_SelectedIndexChanged"  ValidationGroup="GridCosts">
                                <asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
                            </asp:DropDownList>
                            <asp:RequiredFieldValidator ID="RFVActvID" runat="server" ErrorMessage="*" ControlToValidate="ActvID" ValidationGroup="GridCosts"></asp:RequiredFieldValidator>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                   <Telerik:GridTemplateColumn UniqueName="SubActvID" HeaderText="SubActivity" DataField="SubActvID">
                        <ItemTemplate>
                            <asp:Label ID="lblSubActvID" runat="server" Text='<%# Eval("SubActivityName")%>'   ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:DropDownList ID="SubActvID" runat="server" DataTextField="SubActvName" DataValueField="SubActvID" ValidationGroup="GridCosts">
                            </asp:DropDownList>
                            <asp:RequiredFieldValidator ID="RFVSubActvID" runat="server" ErrorMessage="*" ControlToValidate="SubActvID" InitialValue= "- Select One -" ValidationGroup="GridCosts"></asp:RequiredFieldValidator>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridBoundColumn DataField="Description" HeaderText="Description" SortExpression="Description"
                        UniqueName="Description" MaxLength="29">
                        <ItemStyle VerticalAlign="Top" />
                    </Telerik:GridBoundColumn>
                    <Telerik:GridBoundColumn DataField="Resource" HeaderText="Resource" SortExpression="Resource"
                        UniqueName="Resource">
                        <ItemStyle VerticalAlign="Top" />
                    </Telerik:GridBoundColumn>
                    <Telerik:GridTemplateColumn UniqueName="Qty" HeaderText="Quantity" DataField="Qty">
                        <ItemTemplate>
                            <asp:Label ID="lblQty" runat="server" Text='<%# Eval("Qty", "{0:N0}" )%>' ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <Telerik:radnumericTextBox ID="Qty" runat="server" Text='<%# Bind("Qty")%>' Width="50"
                                EnabledStyle-HorizontalAlign="Right" AutoPostBack="true" OnTextChanged="CostsQty_TextChanged"></Telerik:radnumericTextBox>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="CostRate" HeaderText="Cost" DataField="CostRate">
                        <ItemTemplate>
                            <asp:Label ID="lblCostRate" runat="server" Text='<%# Eval("CostRate", "${0:0.00}" )%>' ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <Telerik:radnumericTextBox ID="CostRate" runat="server" Text='<%# Bind("CostRate")%>' Width="50"
                                EnabledStyle-HorizontalAlign="Right"  OnTextChanged="CostsCostRate_TextChanged"></Telerik:radnumericTextBox>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="Contingency" HeaderText="Contingency" DataField="Contingency">
                        <ItemTemplate>
                            <asp:Label ID="lblContingency" runat="server"  Text='<%# Eval("Contingency","{0:0.00} %")%>' ></asp:Label>
                          
                        </ItemTemplate>
                        <EditItemTemplate>
                            <Telerik:radNumericTextBox ID="Contingency" runat="server" Text='<%# Bind("Contingency")%>' Width="50"
                                EnabledStyle-HorizontalAlign="Right"  Type="Percent"  OnTextChanged="CostsContingency_TextChanged">
                                <NumberFormat DecimalDigits="2" />
                             </Telerik:radNumericTextBox>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                     <Telerik:GridTemplateColumn UniqueName="SubTotal" HeaderText="Sub Total"  >
                            <ItemTemplate>
                                <asp:Label ID="lblSubTotal" runat="server"  />
                            </ItemTemplate>
                              <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="Markup" HeaderText="Adj &lt;br/&gt;(MU/MD %)" DataField="Markup">
                        <ItemTemplate>
                            <asp:Label ID="lblMarkup" runat="server" Text='<%# Eval("Markup","{0:0.00} %")%>' ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <Telerik:radnumericTextBox ID="Markup" runat="server" Text='<%# Bind("Markup")%>' Width="50"
                                EnabledStyle-HorizontalAlign="Right" Type="Percent"  OnTextChanged="CostsMarkup_TextChanged">
                                <NumberFormat DecimalDigits="2" />
                             </Telerik:radnumericTextBox>
                        </EditItemTemplate>
                        <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                    <Telerik:GridTemplateColumn UniqueName="Total" HeaderText="Total">
                            <ItemTemplate>
                                <asp:Label ID="lblTotal" runat="server" />
                            </ItemTemplate>
                            <ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
                    </Telerik:GridTemplateColumn>
                </Columns>
            </MasterTableView>
            <ValidationSettings ValidationGroup="GridCosts" />
        </Telerik:RadGrid><br />
        <br />
        <br />
        <br />
       
      
      
        <asp:SqlDataSource ID="SDSCostColumns" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
            DeleteCommand="proc_xBudgetNodeCostsDelete" DeleteCommandType="StoredProcedure"
            InsertCommand="proc_xBudgetNodeCostsInsert" InsertCommandType="StoredProcedure"
            SelectCommand="proc_xBudgetNodeCostsByBReqID" SelectCommandType="StoredProcedure"
            UpdateCommand="proc_xBudgetNodeCostsUpdate" UpdateCommandType="StoredProcedure">
            <SelectParameters>
                <asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
                <asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
            </SelectParameters>
            <DeleteParameters>
                <asp:Parameter Name="BgetNodeCostID" Type="Int64" />
            </DeleteParameters>
            <InsertParameters>
                <asp:Parameter Direction="InputOutput" Name="BgetNodeCostID" Type="Int64" />
                <asp:QueryStringParameter Name="BudgetNodeID" QueryStringField="BNID" Type="Int64" />
                 <asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
                <asp:Parameter Name="ActvID" Type="String" />
                <%-- <asp:Parameter Name="SubActvID" Type="Int64" />  This is set in the InsertCommand in code behind --%>
                <asp:Parameter Name="Description" Type="String" />
                <asp:Parameter Name="Resource" Type="String" />
                <asp:Parameter Name="TypeID" Type="Int64" />
                <asp:Parameter Name="Qty" Type="Int64" />
                <asp:Parameter Name="CostRate" Type="Decimal" />
                <asp:Parameter Name="MarkUp" Type="Double" />
                <asp:Parameter Name="Contingency" Type="Double" />
                <asp:Parameter Name="IncludeSell" Type="Boolean" />
            </InsertParameters>
            <UpdateParameters>
            <asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
                <asp:Parameter Name="ActvID" Type="String" />
                <%--<asp:Parameter Name="SubActvID" Type="Int64" />  This is set in the UpdateCommand in code behind--%>
                <asp:Parameter Name="Description" Type="String" />
                <asp:Parameter Name="Resource" Type="String" />
                <asp:Parameter Name="TypeID" Type="Int64" />
                <asp:Parameter Name="Qty" Type="Int64" />
                <asp:Parameter Name="CostRate" Type="Decimal" />
                <asp:Parameter Name="MarkUp" Type="Double" />
                <asp:Parameter Name="Contingency" Type="Double" />
            </UpdateParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SDSFeeColumns" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
            DeleteCommand="proc_xBudgetNodeFeesDelete" DeleteCommandType="StoredProcedure"
            InsertCommand="proc_xBudgetNodeFeesInsertByBudReqID" InsertCommandType="StoredProcedure"
            SelectCommand="proc_xBudgetNodeFeesByBReqID" SelectCommandType="StoredProcedure"
            UpdateCommand="proc_xBudgetNodeFeesUpdate" UpdateCommandType="StoredProcedure">
            <SelectParameters>
                <asp:QueryStringParameter Name="BudgetReqID" QueryStringField="BReqID" Type="Int64" />
                <asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
            </SelectParameters>
            <DeleteParameters>
                <asp:Parameter Name="BgetNodeFeesID" Type="Int64" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="BgetNodeFeesID" Type="Int64" />
                <asp:Parameter Name="BudgetNodeID" Type="Int64" />
                <asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
                <asp:Parameter Name="RoleID" Type="String" />
                <asp:Parameter Name="SourcesID" Type="String" />
                <asp:Parameter Name="Resource" Type="String" />
                <asp:Parameter Name="CostCenterID" Type="String" />
                <asp:Parameter Name="Description" Type="String" />
                <asp:Parameter Name="Hours" Type="Int32" />
                <asp:Parameter Name="Cost" Type="Decimal" />
                <asp:Parameter Name="CostStars" Type="String" />
                <asp:Parameter Name="SellRate" Type="Decimal" />
                <%--<asp:Parameter Name="MarkUp" Type="Double" />
                <asp:Parameter Name="Contingency" Type="Double" />
                <asp:Parameter Name="IncludeSell" Type="Boolean" />--%>
            </UpdateParameters>
            <InsertParameters>
              <%--  <asp:Parameter Direction="InputOutput" Name="BgetNodeFeesID" Type="Int64" />--%>
          <%--      <asp:Parameter Name="BudgetNodeID" Type="Int64" />--%>
                <asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
                <asp:Parameter Name="RoleID" Type="String" />
                <asp:Parameter Name="SourcesID" Type="Int64" />
                <asp:Parameter Name="Resource" Type="String" />
                <asp:Parameter Name="CostCenterID" Type="String" />
                <asp:Parameter Name="Description" Type="String" />
                <asp:Parameter Name="Hours" Type="Int32" />
                <asp:Parameter Name="Cost" Type="Decimal" />
                <asp:Parameter Name="CostStars" Type="String" />
                <asp:Parameter Name="SellRate" Type="Decimal" />
                <asp:Parameter Name="MarkUp" Type="Double" />
                <asp:Parameter Name="Contingency" Type="Double" />
                <asp:Parameter Name="IncludeSell" Type="Boolean" />
            </InsertParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SDSRoles" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
            SelectCommand="proc_xRoleNamesByRateCardID" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
                <asp:ControlParameter ControlID="ddlRateCard" Name="RateID" PropertyName="SelectedValue"
                    Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SDSSources" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
            SelectCommand="proc_xSourcesLoadAllByCompanyID" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:QueryStringParameter Name="CompanyID" QueryStringField="ID" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SDSCostCenters" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
            SelectCommand="proc_xCostCenterProfileByName" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
                <asp:QueryStringParameter Name="CompanyID" QueryStringField="ID" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SDSActivities" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
            SelectCommand="proc_xActivitiesLoadAllByCompanyIDIsViewable" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:SessionParameter Name="CompanyID" SessionField="ID" Type="String" />
                <asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SDSSubActivities" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
            SelectCommand="proc_xSubActivitiesLoadAllByCompanyIDIsViewable" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:QueryStringParameter Name="CompanyID" QueryStringField="ID" Type="Int64" />
                <asp:Parameter DefaultValue="1585" Name="ActivityID" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="sdsCustomer" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
            SelectCommand="proc_xCustomerLoadAllActiveOther" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="sdsRateCards" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
            SelectCommand="proc_xRateNamesAllOther" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SDSJobNumbers" runat="server" ConnectionString="<%$ ConnectionStrings:Budget2ConnectionString %>"
                        SelectCommand="proc_ReturnAvailableJobNumbers" SelectCommandType="StoredProcedure">
                        <SelectParameters>
                            <asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
                        </SelectParameters>
        </asp:SqlDataSource>
   
   
   
   
   
    </div>
     </asp:Content>
 <%--   </form>
</body>
</html>--%>

ASPX.VB
Imports System.Data
Imports System.Data.SqlClient
Imports Telerik.Web.UI
Imports System.Math
Imports PBDAL.StoredProcedureCallerClasses
Imports Budget.Roles.BudgetRoleProvider
Imports System.Text
Imports RequestProcess
Imports MailUtilities
Imports PBBRL.EntityClass.xProject
Imports PBBRL.EntityClass.xProjectRequest
Partial Class Requests_ProposalRequest
    Inherits PBBRL.BasePage.MyBasePage

    Dim GridTotalHours As Integer
    Dim GridTotalHoursWithCont, GridSubTotal, GridTotal As Double
    Dim GridCostsSubTotal, GridCOstsTotal, GridSubTotalWithoutCont, GridCOstsSubTotalNoCont As Double
    Dim EditDoc As Boolean = True
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim EditDoc As Boolean = True
        Try
            ViewState.Add("CompanyID", Request.QueryString("ID").ToString())
        Catch
            ViewState.Add("CompanyID", "")
        End Try
        Try
            ViewState.Add("BudReqID", Request.QueryString("BReqID").ToString())
        Catch
            ViewState.Add("BudReqID", "")
        End Try
        Dim Temp As String = Session("DBName")

        If Not IsPostBack Then
           
            ''Load Page Headers
            ''Do this if it is being loaded for the first time
            Master.DisplayDataFromPage("Proposal Request")
            Master.GetMenuDataSourceFromPage("ProjectRequestsSiteMap")

            If ViewState.Item("BudReqID") <> "" Then
                'Load the existing values from ProjectRequest
                Dim obj As New PBDAL.EntityClasses.XProjectRequestEntity
                obj.FetchUsingPK(ViewState.Item("BudReqID"))
                If obj.RateCardId.ToString <> "" Then
                    Me.ddlRateCard.SelectedValue = obj.RateCardId
                    ViewState.Add("RateCardID", obj.RateCardId)
                End If
                If obj.EffectiveDate.HasValue Then
                    Me.dteRateEffectiveDate.SelectedDate = obj.EffectiveDate
                    ViewState.Add("EffectiveDate", obj.EffectiveDate)
                End If
                If obj.ProjDesc.ToString <> "" Then
                    Me.txtDescription.Text = obj.ProjDesc
                End If
                If obj.ApprovalName.ToString <> "" Then
                    Me.lblApprovedName.Text = obj.ApprovalName
                End If
                If obj.ApprovalDate.HasValue Then
                    Me.lblApprovedDte.Text = obj.ApprovalDate.ToString
                End If
                If obj.Billings.HasValue Then
                    Me.numBillings.Text = CType(obj.Billings, String)
                End If
                If obj.Revenue.HasValue Then
                    Me.numRevenue.Text = CType(obj.Revenue, String)
                End If
                If obj.ExpectedStartDate.HasValue Then
                    Me.dteExpectedStartDte.SelectedDate = obj.ExpectedStartDate
                End If
                If obj.ExpectedEndDate.HasValue Then
                    Me.dteExpectedEndDte.SelectedDate = obj.ExpectedEndDate
                End If
                If obj.NoBid.HasValue Then
                    Me.chkNoBid.Checked = obj.NoBid
                End If
                If obj.CostCenterId.ToString <> "" Then
                    Me.ddlCostCenterNames.SelectedValue = obj.CostCenterId
                    ViewState.Add("CostCenterID", obj.CostCenterId)
                End If
                If obj.CustId.ToString <> "" Then
                    Me.ddlClientName.SelectedValue = obj.CustId
                End If
                If obj.RequestStatus <> "" Then
                    Me.txtRequestStatus.Text = obj.RequestStatus
                End If
                If obj.ProjectName <> "" Then
                    Me.txtProjectName.Text = obj.ProjectName
                End If
                If obj.JobNumber <> "" Then
                    'First see if it is still available
                    Dim dt As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcJobNumberStillAvailable(Session("DBName"), obj.JobNumber)
                    If dt.Rows.Count > 0 Then
                        'There's a matching JobNumber
                        Me.ddlJobNumber.SelectedValue = obj.JobNumber
                        Me.lblJobNumber.Visible = False
                    Else
                        'Not available any more
                        Me.lblJobNumber.Text = obj.JobNumber
                        Me.ddlJobNumber.Visible = False
                    End If
                End If


                'See if user can edit it
                Dim LockedBy As String = WhoLockedRecord(ViewState.Item("BudReqID"), "BReqID", Nothing, "Open")


                'if Request status is declined, no one can edit
                If Me.txtRequestStatus.Text = "Declined" Then
                    SetNoEditAccess()
                Else

                    'Role/Access/Lock check
                    If FindUserInRequestBudReq(Session("UserName"), ViewState.Item("BudReqID")) Or FindUserInCostCenterView(Session("UserName"), ViewState.Item("CostCenterID")) Or FindUserInCompanyView(Session("UserName"), ViewState.Item("CompanyID")) Or FindUserInRequestBudReqEdit(Session("UserName"), ViewState.Item("BudReqID")) Or FindUserInSystem(Session("UserName")) Or FindUserInCompanyAdmin(Session("UserName"), ViewState.Item("CompanyID")) Or FindUserInCostCenterAdmin(Session("UserName"), ViewState.Item("CostCenterID")) Then
                        'if they can read, Check the Edit Access
                        If FindUserInRequestBudReqEdit(Session("UserName"), ViewState.Item("BudReqID")) Or FindUserInCostCenterFM(Session("UserName"), ViewState.Item("CostCenterID")) Or FindUserInSystem(Session("UserName")) Or FindUserInCompanyAdmin(Session("UserName"), ViewState.Item("CompanyID")) Or FindUserInCostCenterAdmin(Session("UserName"), ViewState.Item("CostCenterID")) Then
                            'The user has access
                            If LockedBy = "" Or LockedBy = "Me" Then
                                'It's not locked
                                If Me.txtRequestStatus.Text = "Approved" Then
                                    EditDoc = False
                                    Me.lblEditStatus.Text = "You do not have access to modify this page because it has already been Approved"
                                End If
                            ElseIf LockedBy <> "" Then
                                'It is locked
                                EditDoc = False
                                Me.lblEditStatus.Text = "This record is currently locked by: " & LockedBy
                            End If
                        Else
                            'USer has no access
                            EditDoc = False
                            Me.lblEditStatus.Text = "You do not have access to modify this page"
                        End If

                        If EditDoc = False Then
                            SetNoEditAccess()
                        End If
                    Else
                        'don't open page
                        'Define the JavaScript function for the specified control.
                        Dim focusScript As String = "<script language='javascript'>window.alert('You do not have access to view this page. Please contact the producer for assistance.'); window.history.back();</script>"
                        Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
                    End If
                End If

                'Hide the Columns in the Grid, depending on Company Profile
                HideColumns()

                'Get values from Cost Center
                Dim objCostCenter As New PBBRL.EntityClass.xCostCenterProfiles
                objCostCenter.FetchUsingPK(ViewState.Item("CostCenterID"))
                ViewState.Add("HideCosts", objCostCenter.HideCosts)
                If objCostCenter.ProposalPercentage.HasValue Then
                    ViewState.Add("ExceedPercentage", objCostCenter.ProposalPercentage)
                    Dim Percentage As Decimal = ViewState.Item("ExceedPercentage") / 100
                    Me.lblExceed.Text = String.Format("{0:P0}", (Percentage), 0)
                Else
                    ViewState.Add("ExceedPercentage", 0)
                    Me.lblExceed.Text = String.Format("{0:P0}", 0, 0)

                End If

                'Calculate Totals
                CalculateTotals()
            End If
            End If
        'See if user can edit it

        ClientScript.RegisterOnSubmitStatement(Me.GetType(), "OnSubmitScript", "needToConfirm = false;")

    End Sub

    Sub SetNoEditAccess()
        'It's locked or you have no access - Change all fields to read only
 
        '    'Change all fields to read only
        Me.GridFees.MasterTableView.GetColumn("EditColumn").Display = False
        Me.GridFees.MasterTableView.GetColumn("DeleteColumn").Display = False
        Me.GridFees.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.None
        Me.GridCosts.MasterTableView.GetColumn("EditColumn").Display = False
        Me.GridCosts.MasterTableView.GetColumn("DeleteColumn").Display = False
        Me.GridCosts.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.None
        Me.btnSaveDraft.Visible = False
        Me.btnSubmit.Visible = False
        Me.btnCalculateRates.Visible = False
        Me.btnRefresh.Visible = False
        Me.btnApprove.Visible = False
        Me.btnDeclined.Visible = False
        Me.txtProjectName.Enabled = False
        Me.ddlCostCenterNames.Enabled = False
        Me.ddlClientName.Enabled = False
        Me.numBillings.Enabled = False
        Me.numRevenue.Enabled = False
        Me.ddlRateCard.Enabled = False
        Me.dteRateEffectiveDate.Enabled = False
        Me.chkNoBid.Enabled = False
        Me.dteExpectedEndDte.Enabled = False
        Me.dteExpectedStartDte.Enabled = False
        Me.txtDescription.Enabled = False
        Me.ddlJobNumber.Enabled = False
        Me.txtDeclineReason.Enabled = False
    End Sub
    Public Sub HideColumns()
        Dim VisibleColumn As String
        'FEES GRID
        'This will loop through Columns that should be there
        'Set up connection
        Dim dao As New PBDAL.DaoClasses.TypedListDAO()
        Dim reader As IDataReader = dao.GetAsDataReader(Nothing, PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.GetProcXBudgetNodeFeesAllViewableProposalRequestCallAsQuery(ViewState.Item("CompanyID")), CommandBehavior.CloseConnection)
        Dim VisibleColumnArray As New ArrayList
        While reader.Read()
            'reading from the datareader
            VisibleColumn = reader(0).ToString().ToUpper
            VisibleColumnArray.Add(VisibleColumn)
        End While
        reader.Close()

        Dim x As Integer
        For x = 0 To Me.GridFees.MasterTableView.Columns.Count - 1
            Dim PossibleColumnName As String = Me.GridFees.MasterTableView.Columns(x).UniqueName.ToUpper
            If VisibleColumnArray.Contains(PossibleColumnName) Then
                'It's OK
            ElseIf PossibleColumnName = "DELETECOLUMN" Or PossibleColumnName = "EDITCOLUMN" Or PossibleColumnName = "TOTAL" Then
                'It's OK
            Else
                Me.GridFees.MasterTableView.Columns(x).Visible = False
            End If
        Next

        ''COSTS GRID
        ''This will loop through Columns that should be there
        ''Set up connection
        Dim dao2 As New PBDAL.DaoClasses.TypedListDAO()
        Dim reader2 As IDataReader = dao2.GetAsDataReader(Nothing, PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.GetProcXBudgetNodeCostsAllViewableProposalRequestCallAsQuery(ViewState.Item("CompanyID")), CommandBehavior.CloseConnection)
        Dim VisibleColumnArray2 As New ArrayList
        While reader2.Read()
            'reading from the datareader
            VisibleColumn = reader2(0).ToString().ToUpper
            VisibleColumnArray2.Add(VisibleColumn)
        End While
        reader2.Close()

        Dim y As Integer
        For y = 0 To Me.GridCosts.MasterTableView.Columns.Count - 1
            Dim PossibleColumnName As String = Me.GridCosts.MasterTableView.Columns(y).UniqueName.ToUpper
            If VisibleColumnArray2.Contains(PossibleColumnName) Then
                'It's OK
            ElseIf PossibleColumnName = "DELETECOLUMN" Or PossibleColumnName = "EDITCOLUMN" Or PossibleColumnName = "TOTAL" Then
                'It's OK
            Else
                Me.GridCosts.MasterTableView.Columns(y).Visible = False
            End If
        Next
    End Sub

    'Buttons
    Protected Sub btnSaveDraft_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSaveDraft.Click
        Dim BudReqID As Integer
        Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
        Dim ClientID As String = Me.ddlClientName.SelectedValue
        Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
        Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
        Dim ReqStatus As String = Me.txtRequestStatus.Text

        Dim Billings As Integer = Me.numBillings.Value
        Dim Revenue As Integer = Me.numRevenue.Value
        Dim PDesc As String = Me.txtDescription.Text
        Dim NoBid As Boolean = Me.chkNoBid.Checked
        Dim RCardID As String = Me.ddlRateCard.SelectedValue
        Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
        Dim NewPID As String = ""
        Dim NewBudgetID As Integer = 0
        Dim BudgetNodeID As Integer = 0

        Dim ProjectNumber As String = Me.ddlJobNumber.SelectedValue
        If ProjectNumber = "0" Then
            ProjectNumber = Nothing
        End If

        'Just saves the header information
        If Me.txtRequestStatus.Text = "" Then
            'It's new, save a new Request
            PBBRL.EntityClass.xProjectRequest.AddProjectRequest(CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, CType(Billings, Integer), CType(Revenue, Integer), PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber, Session("UserName"), BudReqID)
            Me.txtRequestStatus.Text = "Draft"
            ViewState.Add("BudReqID", BudReqID)
            AddUserToRole(Session("UserName"), ViewState.Item("BudReqID"), "RequestAccessProposal", "EditAccess")
            Response.Redirect("~/Requests/ProposalRequest.aspx?ID=" + ViewState.Item("CompanyID").ToString + "&BReqID=" + ViewState.Item("BudReqID").ToString)
        Else
            'It already exists, just update it
            PBBRL.EntityClass.xProjectRequest.UpdateProjectRequest(ViewState.Item("BudReqID"), CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber)
        End If
    End Sub
    Protected Sub btnSaveDraft_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSaveDraft.PreRender
        If Me.txtRequestStatus.Text = "" Or Me.txtRequestStatus.Text = "Draft" Then
            Me.btnSaveDraft.Visible = True
        Else
            Me.btnSaveDraft.Visible = False
        End If
    End Sub
    Protected Sub btnRefresh_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRefresh.Click
        CalculateTotals()

    End Sub
    Protected Sub btnRefresh_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRefresh.PreRender
        If Me.txtRequestStatus.Text = "Approved" Or Me.txtRequestStatus.Text = "Declined" Then
            Me.btnRefresh.Visible = False
        Else
            Me.btnRefresh.Visible = True
        End If
    End Sub
    Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
        'Get values to get updated
        Dim BudReqID As Integer
        Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
        Dim ClientID As String = Me.ddlClientName.SelectedValue
        Dim ClientName As String = Trim(Me.ddlClientName.SelectedItem.Text)
        Dim ProjectName As String = Me.txtProjectName.Text
        Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
        Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
        Dim ReqStatus As String = Me.txtRequestStatus.Text
        Dim ProjectNumber As String = ""
        Dim Billings As Integer = Me.numBillings.Value
        Dim Revenue As Integer = Me.numRevenue.Value
        Dim PDesc As String = Me.txtDescription.Text
        Dim NoBid As Boolean = Me.chkNoBid.Checked
        Dim RCardID As String = Me.ddlRateCard.SelectedValue
        Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
        Dim NewPID As String = ""
        Dim NewBudgetID As Integer = 0
        Dim BudgetNodeID As Integer = 0
        Dim BNFeesID As Integer = 0
        Dim BNCostID As Integer = 0
        Dim feesMarkup As Integer = 0
        Dim feesCont As Integer = 0
        Dim costsMarkup As Integer = 0
        Dim costsCont As Integer = 0
        Dim FromUser As New Net.Mail.MailAddress(GetUserEmail())
        Dim SendTo() As String
        Dim CCopy(0) As String
        Dim BCopy(0) As String
        Dim Body As String = ""
        Dim RevRecogID As Integer
        Dim CreatedBy As String
        Dim CreatedDte As String

        'Get ProjectNumber
        ProjectNumber = Me.ddlJobNumber.SelectedItem.Value
        If ProjectNumber <> "0" Then
            ProjectNumber = Me.ddlJobNumber.SelectedItem.Text
        Else
            ProjectNumber = Nothing
        End If

        'validate required fields
        Validate()

        'first save updates to tables if there is one already or create one
        If ViewState.Item("BudReqID").ToString = "" Then
            PBBRL.EntityClass.xProjectRequest.AddProjectRequest(CCID, ClientID, EStartDte, EEndDte, ReqStatus, RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber, Session("UserName"), BudReqID)
            ViewState.Add("BudReqID", CType(BudReqID, String))
            'Add User to access table
            AddUserToRole(Session("UserName"), ViewState.Item("BudReqID"), "RequestAccessProposal", "EditAccess")
        Else
            PBBRL.EntityClass.xProjectRequest.UpdateProjectRequest(ViewState.Item("BudReqID"), CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber)
        End If

        'If Nobid then no approval needed - create budget structure
        'else send for approval and update status
        If NoBid Then
            'Update request status, create Project profile, create standard budget structure, and put request in as proposal
            PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "No Approval Needed", Nothing)

            'Get Creator of request
            Dim obj1 As New PBDAL.EntityClasses.XProjectRequestEntity
            obj1.FetchUsingPK(ViewState.Item("BudReqID"))
            CreatedBy = obj1.CreatedBy
            CreatedDte = obj1.CreatedDate

            'Get Cost Center defaults for Project Profile
            Dim obj As New PBDAL.EntityClasses.XCostCenterProfileEntity
            obj.FetchUsingPK(ViewState.Item("CostCenterID"))
            feesMarkup = obj.FeeMarkUp
            feesCont = obj.FeeContingency
            costsMarkup = obj.CostMarkUp
            costsCont = obj.CostContingency
            RevRecogId = obj.RevRecogId

            'Create Project Profile
            PBBRL.EntityClass.xProject.CreateProjectProfile(Me.txtProjectName.Text, ClientID, ProjectNumber, RCardID, EStartDte, EEndDte, CCID, ViewState.Item("BudReqID"), CreatedBy, CreatedDte, Nothing, EffDate, feesMarkup, feesCont, costsMarkup, costsCont, RevRecogID, NewPID)

            'Give access to project profile
            AddUserToRole(Session("UserName"), NewPID, "ProjectAccess", "EditAccess")

            'Creates Default Budget Structure and creates new budget
            PBBRL.EntityClass.xBudget.NewActiveBudget("New", NewPID, Me.txtProjectName.Text, NewBudgetID)

            'Create the Edit Navigation, Project Rollup, and Proposal Budget nodes
            PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Edit Navigation", NewPID, NewBudgetID, 0, GetTodaysDateTime(), Session("UserName"))
            PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Proposal Node", NewPID, NewBudgetID, 2, GetTodaysDateTime(), Session("UserName"))
            PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Budget Rollup", NewPID, NewBudgetID, 1, GetTodaysDateTime(), Session("UserName"))

            'Get the New BudgetNodeID
            PBBRL.EntityClass.xBudgetNode.GetBudgetNodeIDofProposal(NewBudgetID, BudgetNodeID)

            'Give access to proposal
            AddUserToRole(Session("UserName"), BudgetNodeID, "ProposalAccess", "EditAccess")

            'Get BudgetNodeFeesID and update with BudgetNode ID
            Dim dao As New PBDAL.DaoClasses.TypedListDAO()
            Dim reader As IDataReader
            reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeFeesByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
            Do While reader.Read()
                BNFeesID = reader.GetValue(3)
                If BNFeesID <> 0 Then
                    PBBRL.EntityClass.xBudgetNodeFees.UpdateBudgetNodeID(BNFeesID, BudgetNodeID, ViewState.Item("BudReqID"))
                End If
            Loop

            'Get BudgetNodeCostsID and update with BudgetNodeID
            reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeCostsByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
            Do While reader.Read()
                BNCostID = reader.GetValue(4)
                If BNCostID <> 0 Then
                    PBBRL.EntityClass.xBudgetNodeCosts.UpdateBudgetNodeID(BNCostID, BudgetNodeID, ViewState.Item("BudReqID"))
                End If
            Loop
            reader.Close()

            'Update request status
            PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "No Approval Needed", Nothing)

            Me.txtRequestStatus.Text = "No Approval Needed"
            Me.btnSubmit.Visible = False
            Me.btnApprove.Visible = False
            Me.btnDeclined.Visible = False
            Me.btnSaveDraft.Visible = False

            'Send user to Project Home Page
            Response.Redirect("~/Project/ProjectHome.aspx?PID=" & CType(NewPID, String) & "")
        Else

            SendTo = GetEmailByRole("ProposalRequestApprover", ViewState.Item("CostCenterID"))
            If SendTo.Length = 0 Then
                Dim focusScript As String = "<script language='javascript'>alert('There is no proposal request approver for this cost center. Please contact the producer for assistance.');</script>"
                Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
            Else
                'Send out Notification
                CCopy(0) = ""
                BCopy(0) = ""
                SubmitForApprovalBody(ClientName, ProjectName, CType(EEndDte, String), String.Format("{0:C}", CType(Revenue, Integer)), ViewState.Item("BudReqID"), ViewState.Item("CompanyID"), Body)
                SendMail(FromUser, SendTo, CCopy, BCopy, "Proposal Request for " & Me.txtProjectName.Text & " needs your approval", Body)
                'Update status
                PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "Submitted for Approval", Nothing)

                Me.txtRequestStatus.Text = "Sumbmitted for Approval"
                Me.btnSubmit.Visible = False
                Me.btnApprove.Visible = False
                Me.btnDeclined.Visible = False
                Me.btnSaveDraft.Visible = False
                Response.Redirect("~")
            End If
        End If
    End Sub
    Protected Sub btnSubmit_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.PreRender
        If Me.txtRequestStatus.Text = "Draft" Or Me.txtRequestStatus.Text = "Declined" Then
            Me.btnSubmit.Visible = True
        Else
            Me.btnSubmit.Visible = False
        End If
    End Sub
    Protected Sub btnCalculateRates_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCalculateRates.Click
        'They've chosen a new Rate Card and/or Effective Date - change the Rates for all line items for all nodes for all Budgets for this Project
        'Assign values
        Dim RateTypeCD As String
        Dim RateCardID As String = Me.ddlRateCard.SelectedValue
        Dim EffectiveDate As Date = Me.dteRateEffectiveDate.SelectedDate
        Dim PROJ As String = Me.ddlJobNumber.Text
        Dim OFFC As String = Me.ddlCostCenterNames.SelectedValue
        Dim CUST As String = Me.ddlClientName.SelectedValue
        'Get line items
        Dim dao As New PBDAL.DaoClasses.TypedListDAO()
        Dim temp As String = Session("DBName")
        Dim reader As IDataReader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeFeesByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
        Do While reader.Read()
            'Get RoleID and EmployeeID from Line Item
            Dim FeesID As String = reader.GetValue(3)
            Dim LABC As String = reader.GetValue(0)
            Dim EMP As String
            Try
                EMP = reader.GetValue(8)
            Catch ex As Exception
                EMP = ""
            End Try
            'If reader.GetValue(8) = Null Then
            '    EMP = ""
            'Else
            '    EMP = reader.GetValue(8)
            'End If
            'First get Sell Rate
            RateTypeCD = "BR"
            Dim SellRate As Double = CalculateRates(RateCardID, RateTypeCD, EffectiveDate, LABC, EMP, PROJ, OFFC, CUST)
            'Then get Cost Rate
            RateTypeCD = "CR"
            Dim CostRate As Double = CalculateRates(RateCardID, RateTypeCD, EffectiveDate, LABC, EMP, PROJ, OFFC, CUST)
            'Update the Sell and Cost rate for that Line Item
            PBBRL.EntityClass.xBudgetNodeFees.UpdateSellAndCostRate(FeesID, SellRate, CostRate)

        Loop
        Me.GridFees.Rebind()
        ' Dim dt As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXBudgetNodeFeesByBreqId(ViewState.Item("BudReqID"), ViewState.Item("DBName"))



    End Sub
    Protected Sub btnCalculateRates_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCalculateRates.PreRender
        If Me.txtRequestStatus.Text = "Approved" Or Me.txtRequestStatus.Text = "Declined" Then
            Me.btnCalculateRates.Visible = False
        Else
            Me.btnCalculateRates.Visible = True
        End If
    End Sub
    Protected Sub btnApprove_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnApprove.Click
        'Get values to get updated in case DOP made changes
        Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
        Dim ClientID As String = Me.ddlClientName.SelectedValue
        Dim ClientName As String = Trim(Me.ddlClientName.SelectedItem.Text)
        Dim ProjectName As String = Me.txtProjectName.Text
        Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
        Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
        Dim ReqStatus As String = Me.txtRequestStatus.Text
        Dim ProjectNumber As String = ""
        Dim rateCardID As String = Me.ddlRateCard.SelectedValue
        Dim Billings As Integer = Me.numBillings.Value
        Dim Revenue As Integer = Me.numRevenue.Value
        Dim PDesc As String = Me.txtDescription.Text
        Dim NoBid As Boolean = Me.chkNoBid.Checked
        Dim Bid As Boolean = Me.chkNoBid.Checked
        Dim RCardID As String = Me.ddlRateCard.SelectedValue
        Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
        Dim NewPID As String = ""
        Dim NewBudgetID As Integer = 0
        Dim BudgetNodeID As Integer = 0
        Dim feesMarkup As Integer = 0
        Dim feesCont As Integer = 0
        Dim costsMarkup As Integer = 0
        Dim costsCont As Integer = 0
        Dim FromUser As New Net.Mail.MailAddress(GetUserEmail())
        Dim SendTo() As String
        Dim CCopy(0) As String
        Dim BCopy(0) As String
        Dim CreatedBy As String
        Dim CreatedDte As String
        Dim Body As String = ""
        Dim BNFeesID As Integer = 0
        Dim BNCostID As Integer = 0
        Dim revRecogID As Integer

        'Get Creator of request
        Dim obj As New PBDAL.EntityClasses.XProjectRequestEntity
        obj.FetchUsingPK(ViewState.Item("BudReqID"))
        CreatedBy = obj.CreatedBy
        CreatedDte = obj.CreatedDate

        'Get ProjectNumber
        If Me.ddlJobNumber.SelectedItem.Text <> "" Then
            ProjectNumber = Me.ddlJobNumber.SelectedItem.Text
        End If

        'validate required fields
        Validate()

        SendTo = GetEmailByRole("ProposalRequestUsers", ViewState.Item("BudReqID"))
        If SendTo.Length = 0 Then
            Dim focusScript As String = "<script language='javascript'>alert('There are no proposal request team members for this request. Please contact the producer for assistance.');</script>"
            Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
        Else
            'Update Project Request in case changes where made
            PBBRL.EntityClass.xProjectRequest.UpdateProjectRequest(ViewState.Item("BudReqID"), CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber)

            'Get Cost Center defaults for Project Profile
            Dim objCC As New PBDAL.EntityClasses.XCostCenterProfileEntity
            objCC.FetchUsingPK(ViewState.Item("CostCenterID"))
            feesMarkup = objCC.FeeMarkUp
            feesCont = objCC.FeeContingency
            costsMarkup = objCC.CostMarkUp
            costsCont = objCC.CostContingency
            revRecogID = objCC.RevRecogId


            'Create Project Profile
            PBBRL.EntityClass.xProject.CreateProjectProfile(Me.txtProjectName.Text, ClientID, ProjectNumber, RCardID, EStartDte, EEndDte, CCID, ViewState.Item("BudReqID"), CreatedBy, CreatedDte, Nothing, EffDate, feesMarkup, feesCont, costsMarkup, costsCont, revRecogID, NewPID)

            'Give access to project profile
            AddUserToRole(Session("UserName"), NewPID, "ProjectAccess", "EditAccess")
            AddUserToRole(CreatedBy, NewPID, "ProjectAccess", "EditAccess")

            'Creates Default Budget Structure and creates new budget
            PBBRL.EntityClass.xBudget.NewActiveBudget("New", NewPID, Me.txtProjectName.Text, NewBudgetID)

            'Create the Edit Navigation, Project Rollup, and Proposal Budget nodes
            PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Edit Navigation", NewPID, NewBudgetID, 0, GetTodaysDateTime(), Session("UserName"))
            PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Proposal Node", NewPID, NewBudgetID, 2, GetTodaysDateTime(), Session("UserName"))
            PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Budget Rollup", NewPID, NewBudgetID, 1, GetTodaysDateTime(), Session("UserName"))

            'Get the New BudgetNodeID
            PBBRL.EntityClass.xBudgetNode.GetBudgetNodeIDofProposal(NewBudgetID, BudgetNodeID)

            'Give access to proposal
            AddUserToRole(Session("UserName"), BudgetNodeID, "ProposalAccess", "EditAccess")
            AddUserToRole(CreatedBy, BudgetNodeID, "ProposalAccess", "EditAccess")

            'Get BudgetNodeFeesID and update with BudgetNode ID
            Dim dao As New PBDAL.DaoClasses.TypedListDAO()
            Dim reader As IDataReader
            reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeFeesByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
            Do While reader.Read()
                BNFeesID = reader.GetValue(3)
                If BNFeesID <> 0 Then
                    PBBRL.EntityClass.xBudgetNodeFees.UpdateBudgetNodeID(BNFeesID, BudgetNodeID, ViewState.Item("BudReqID"))
                End If
            Loop

            'Get BudgetNodeCostsID and update with BudgetNodeID
            reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeCostsByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
            Do While reader.Read()
                BNCostID = reader.GetValue(4)
                If BNCostID <> 0 Then
                    PBBRL.EntityClass.xBudgetNodeCosts.UpdateBudgetNodeID(BNCostID, BudgetNodeID, ViewState.Item("BudReqID"))
                End If
            Loop
            reader.Close()

            'Update request status
            PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "Approved", Nothing)

            'Send out Notification
            CCopy(0) = ""
            BCopy(0) = ""
            ApprovedBody(ClientName, ProjectName, CType(EEndDte, String), String.Format("{0:C}", CType(Revenue, Integer)), CType(NewPID, String), Body)
            SendMail(FromUser, SendTo, CCopy, BCopy, "Proposal Request for '" & ClientName & "' has been Approved", Body)

            Me.txtRequestStatus.Text = "Approved"
            Me.btnSubmit.Visible = False
            Me.btnApprove.Visible = False
            Me.btnDeclined.Visible = False
            Me.btnSaveDraft.Visible = False

            'Send user to Project Home Page
            Response.Redirect("~/Project/ProjectHome.aspx?PID=" & CType(NewPID, String) & "")
        End If
    End Sub
    Protected Sub btnApprove_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnApprove.PreRender
        If Me.txtRequestStatus.Text = "Submitted for Approval" Then
            Me.btnApprove.Visible = True
        Else
            Me.btnApprove.Visible = False
        End If
    End Sub
    Protected Sub btnDeclined_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDeclined.Click
        'Get values to get updated in case DOP made changes
        Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
        Dim ClientID As String = Me.ddlClientName.SelectedValue
        Dim ClientName As String = Trim(Me.ddlClientName.SelectedItem.Text)
        Dim ProjectName As String = Me.txtProjectName.Text
        Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
        Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
        Dim ReqStatus As String = Me.txtRequestStatus.Text
        Dim ProjectNumber As String = ""
        Dim rateCardID As String = Me.ddlRateCard.SelectedValue
        Dim Billings As Integer = Me.numBillings.Value
        Dim Revenue As Integer = Me.numRevenue.Value
        Dim PDesc As String = Me.txtDescription.Text
        Dim NoBid As Boolean = Me.chkNoBid.Checked
        Dim Bid As Boolean = Me.chkNoBid.Checked
        Dim RCardID As String = Me.ddlRateCard.SelectedValue
        Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
        Dim NewPID As String = ""
        Dim NewBudgetID As Integer = 0
        Dim BudgetNodeID As Integer = 0
        Dim FromUser As New Net.Mail.MailAddress(GetUserEmail())
        Dim SendTo() As String
        Dim CCopy(0) As String
        Dim BCopy(0) As String
        Dim Body As String = ""

        'validate required fields
        Validate()

        If Me.txtDeclineReason.Text = "" Then
            Me.lblErrorMessage.Controls.Add(New LiteralControl("Enter declined reason" + "<br/>"))
        Else
            SendTo = GetEmailByRole("ProposalRequestUsers", ViewState.Item("BudReqID"))
            If SendTo.Length = 0 Then
                Dim focusScript As String = "<script language='javascript'>alert('There are no proposal request team members for this request. Please contact the producer for assistance.');</script>"
                Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
            Else
                'Send out Notification
                CCopy(0) = ""
                BCopy(0) = ""
                DeclinedBody(ClientName, ProjectName, CType(EEndDte, String), String.Format("{0:C}", CType(Revenue, Integer)), ViewState.Item("BudReqID"), Session("ID"), Body)
                SendMail(FromUser, SendTo, CCopy, BCopy, "Proposal Request for '" & ClientName & "' has been Declined", Body)

                'Update status
                PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "Declined", Me.txtDeclineReason.Text)
                Me.txtRequestStatus.Text = "Declined"
                Me.btnSubmit.Visible = False
                Me.btnApprove.Visible = False
                Me.btnDeclined.Visible = False
            End If
            'Send user to Project Home Page
            Response.Redirect("../Default.aspx")
        End If
    End Sub
    Protected Sub btnDeclined_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDeclined.PreRender
        If Me.txtRequestStatus.Text = "Submitted for Approval" Then
            Me.btnDeclined.Visible = True
        Else
            Me.btnDeclined.Visible = False
        End If
    End Sub

    Protected Sub GridFees_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridFees.ItemCommand
        If (e.CommandName = RadGrid.InitInsertCommandName) Then
            'This will set teh default value of the IncludeSell Check box
            e.Canceled = True
            'Prepare an IDictionary with the predefined values
            Dim newValues As System.Collections.Specialized.ListDictionary = New System.Collections.Specialized.ListDictionary()
            'set initial checked state for the checkbox on init insert
            newValues("IncludeSell") = True
            'Insert the item and rebind
            e.Item.OwnerTableView.InsertItem(newValues)
        End If
    End Sub
    Protected Sub GridFees_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles GridFees.ItemDataBound

        If (TypeOf e.Item Is GridDataInsertItem AndAlso e.Item.IsInEditMode) Then
            'This happens when a row goes into Insert mode
            Dim GridItem As GridDataInsertItem = CType(e.Item, GridDataInsertItem)
            'Dim MarkupText As RadNumericTextBox = CType(GridItem("Markup").FindControl("Markup"), RadNumericTextBox)
            'MarkupText.Text = ViewState.Item("FeeMarkup")
            'Dim ContingencyText As RadNumericTextBox = CType(GridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
            'ContingencyText.Text = ViewState.Item("FeeContingency")
            GridItem.FindControl("Cost").Visible = True
            GridItem.FindControl("CostStars").Visible = False
            GridItem.FindControl("lblCostStars").Visible = False

        ElseIf (TypeOf e.Item Is GridDataItem) And e.Item.IsInEditMode = False Then
            'Called everytime the Grid is built/Insert/Update
            Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
            Dim Hours As Double
            'Dim Contingency As Double
            Dim SellRate As Double
            'Dim Markup As Double
            'Dim SourcesID As String

            'Get values for row
            Dim HoursField As Label = CType(GridItem("Hours").FindControl("lblHours"), Label)
            If HoursField.Text = "" Then
                Hours = 0
            Else
                Hours = HoursField.Text
            End If
            Dim ContingencyField As Label = CType(GridItem("Contingency").FindControl("lblContingency"), Label)
            'If ContingencyField.Text = "" Then
            '    Contingency = 0
            'Else
            '    Contingency = Left(ContingencyField.Text, ContingencyField.Text.Length - 2)
            'End If
            Dim SellRateField As Label = CType(GridItem("SellRate").FindControl("lblSellRate"), Label)
            If SellRateField.Text = "" Then
                SellRate = 0
            Else
                SellRate = SellRateField.Text
            End If
            'Dim MarkupField As Label = CType(GridItem("Markup").FindControl("lblMarkup"), Label)
            'If MarkupField.Text = "" Then
            '    Markup = 0
            'Else
            '    Markup = Left(MarkupField.Text, MarkupField.Text.Length - 2)
            'End If
            Dim SourcesField As Label = CType(GridItem("SourcesID").FindControl("lblSourcesID"), Label)

            If SourcesField.Text = "Freelance" Then
                'It's a Freelancer
                'Does CostStars = **** or Numbers
                Dim CostStars As Label = CType(GridItem("Cost").FindControl("lblCostStars"), Label)
                If CostStars.Text = "****" Then
                    'CostStars = ****, so show txtStars (means user has not altered the Cost from Default)
                    GridItem.FindControl("lblCost").Visible = False
                    GridItem.FindControl("lblCostStars").Visible = True
                ElseIf CostStars.Text = "" Then
                    'CostStars = "", so nothing has been done, so show txtStars (means user has not altered the Cost from Default)
                    GridItem.FindControl("lblCost").Visible = False
                    GridItem.FindControl("lblCostStars").Visible = True
                Else
                    'CostStars <> ****, so show txtCost (means user has altered the Cost from Default)
                    GridItem.FindControl("lblCost").Visible = True
                    GridItem.FindControl("lblCostStars").Visible = False
                End If
            ElseIf ViewState.Item("HideCosts") = True Then
                'It's Internal, but Profile says Hide Costs
                GridItem.FindControl("lblCost").Visible = False
                GridItem.FindControl("lblCostStars").Visible = True
            Else
                'It's Internal - Profile says Show Costs
                GridItem.FindControl("lblCost").Visible = True
                GridItem.FindControl("lblCostStars").Visible = False
            End If


            'Recalculate Totals for Row
            'Dim TotalHours As Double = Hours + (Hours * (Contingency / 100))
            'Dim SubTotal As Double = TotalHours * SellRate
            'Dim Total As Double = SubTotal + SubTotal * (Markup / 100)
            'Dim SubTotalWithoutCont As Double = Hours * SellRate
            Dim Total As Double = Round(Hours * SellRate, 0)

            'Assign values for Row
            'Dim TotalHoursField As Label = CType(GridItem("TotalHours").FindControl("lblTotalHours"), Label)
            'TotalHoursField.Text = String.Format("{0:N0}", Round(TotalHours, 0))
            'Dim SubTotalField As Label = CType(GridItem("SubTotal").FindControl("lblSubTotal"), Label)
            'SubTotalField.Text = String.Format("{0:C0}", Round(SubTotal, 0))
            Dim TotalField As Label = CType(GridItem("Total").FindControl("lblTotal"), Label)
            TotalField.Text = String.Format("{0:C0}", Total)


            'Find values for grid
            GridTotalHours = Round(GridTotalHours + Hours, 0)
            'GridTotalHoursWithCont = GridTotalHoursWithCont + TotalHours
            'GridSubTotal = GridSubTotal + SubTotal
            GridTotal = Round(GridTotal + Total, 0)
            'GridSubTotalWithoutCont = GridSubTotalWithoutCont + SubTotalWithoutCont

        ElseIf (TypeOf e.Item Is GridEditableItem AndAlso e.Item.IsInEditMode) Then
            'This happens when a Row goes into Edit mode
            Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
            Dim SourcesField As DropDownList = CType(GridItem("SourcesID").FindControl("SourcesID"), DropDownList)
            Dim SourcesID As String = SourcesField.SelectedValue

            'Hide Costs, depending on Cost Center Profile and Freelancer/Internal
            HideCostsTextBoxes(SourcesID, GridItem)

            Dim HoursField As RadNumericTextBox = CType(GridItem("Hours").FindControl("Hours"), RadNumericTextBox)
            CalculateRowTotalsFees(HoursField)

        ElseIf (TypeOf e.Item Is GridFooterItem) Then
            'Populates Footer Totals
            Dim footerItem As GridFooterItem = CType(e.Item, GridFooterItem)
            footerItem("Hours").Text = String.Format("{0:N0}", Round(GridTotalHours, 0))
            footerItem("Hours").HorizontalAlign = HorizontalAlign.Right
            'footerItem("TotalHours").Text = String.Format("{0:N0}", Round(GridTotalHoursWithCont, 0))
            'footerItem("TotalHours").HorizontalAlign = HorizontalAlign.Right
            'footerItem("SubTotal").Text = String.Format("{0:C0}", GridSubTotal)
            'footerItem("SubTotal").HorizontalAlign = HorizontalAlign.Right
            footerItem("SellRate").Controls.Add(New LiteralControl("Total: <br/>"))
            'footerItem("Markup").Controls.Add(New LiteralControl("Contingency Total:"))
            footerItem("SellRate").HorizontalAlign = HorizontalAlign.Right
            footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridTotal) & " <br/>"))
            'footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridSubTotal - GridSubTotalWithoutCont)))
            footerItem("Total").HorizontalAlign = HorizontalAlign.Right
        End If
    End Sub

    Protected Sub FeesRoleID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
        'Recalculate Rates
        RecalculateRates(sender)
    End Sub
    Protected Sub FeesCostCenterID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
        'Recalculate Rates
        RecalculateRates(sender)
    End Sub
    Protected Sub FeesSourcesID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim Source As DropDownList = CType(sender, DropDownList)
        Dim gridItem As GridDataItem = CType(Source.NamingContainer, GridDataItem)
        Dim SourcesID As String = Source.SelectedValue

        'Recalculate Rates
        RecalculateRates(sender)

        'Hide Costs, depending on Cost Center Profile and Freelancer/Internal
        HideCostsTextBoxes(SourcesID, gridItem)
    End Sub
    Protected Sub FeesHours_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
        CalculateRowTotalsFees(sender)
    End Sub
    Protected Sub FeesContingency_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
        CalculateRowTotalsFees(sender)
    End Sub
    Protected Sub FeesMarkup_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
        CalculateRowTotalsFees(sender)
    End Sub
    Protected Sub FeesCostStars_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
        'If the user changed the STars to a number, move that number into Cost so that it gets saved to the table
        Dim CostStarsField As RadTextBox = CType(sender, RadTextBox)
        Dim gridItem As GridDataItem = CType(CostStarsField.NamingContainer, GridDataItem)
        Dim CostStars As String = CostStarsField.Text
        Dim CostField As RadNumericTextBox = CType(gridItem("Cost").FindControl("Cost"), RadNumericTextBox)
        CostField.Text = CostStars

    End Sub

    Protected Sub CalculateRowTotalsFees(ByVal sender As Object)
        Dim Hours As String
        'Dim Contingency As String
        Dim SellRate As String
        'Dim Markup As String

        Dim AnyField As RadNumericTextBox = CType(sender, RadNumericTextBox)
        Dim gridItem As GridDataItem = CType(AnyField.NamingContainer, GridDataItem)
        'Get values for row
        Dim HoursField As RadNumericTextBox = CType(gridItem("Hours").FindControl("Hours"), RadNumericTextBox)
        If HoursField.Text = "" Then
            Hours = 0
        Else
            Hours = HoursField.Text
        End If
        'Dim ContingencyField As RadNumericTextBox = CType(gridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
        'If ContingencyField.Text = "" Then
        '    Contingency = 0
        'Else
        '    Contingency = ContingencyField.Text
        'End If
        Dim SellRateField As Label = CType(gridItem("SellRate").FindControl("lblSellRate"), Label)
        If SellRateField.Text = "" Then
            SellRate = 0
        Else
            SellRate = SellRateField.Text
        End If
        'Dim MarkupField As RadNumericTextBox = CType(gridItem("Markup").FindControl("Markup"), RadNumericTextBox)
        'If MarkupField.Text = "" Then
        '    Markup = 0
        'Else
        '    Markup = MarkupField.Text
        'End If

        'Recalculate Totals for Row
        'Dim TotalHours As Double = Hours + (Hours * (Contingency / 100))
        'Dim SubTotal As Double = TotalHours * SellRate
        'Dim Total As Double = SubTotal + SubTotal * (Markup / 100)
        Dim Total As Double = round(Hours * SellRate, 0)

        'Assign values for Row
        'Dim TotalHoursField As Label = CType(gridItem("TotalHours").FindControl("lblTotalHours"), Label)
        'TotalHoursField.Text = String.Format("{0:N0}", Round(TotalHours, 0))
        'Dim SubTotalField As Label = CType(gridItem("SubTotal").FindControl("lblSubTotal"), Label)
        'SubTotalField.Text = String.Format("{0:C0}", Round(SubTotal, 0))
        Dim TotalField As Label = CType(gridItem("Total").FindControl("lblTotal"), Label)
        TotalField.Text = String.Format("{0:C0}", Total)
    End Sub
    Protected Sub CalculateTotals()
        If ViewState.Item("BudReqID") <> "" Then
            'Only do this is there's a BudReqID
            Dim dt0 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestDoesDataExist(ViewState.Item("BudReqID"))

            If dt0.Rows.Count > 0 Then

                Dim dt As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnTotalFees(ViewState.Item("BudReqID"))

                Dim TotalFees As Integer = dt.Rows(0).Item(0)
                Me.lblFeesTotal.Text = String.Format("{0:C0}", Round(TotalFees, 0))

                Dim dt2 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnTotalCosts(ViewState.Item("BudReqID"))
                Dim TotalCosts As Integer = dt2.Rows(0).Item(0)
                Me.lblCostsTotal.Text = String.Format("{0:C0}", Round(TotalCosts, 0))

                Dim dt3 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnTotalFreelance(ViewState.Item("BudReqID"))
                Dim TotalFreelance As Integer = dt3.Rows(0).Item(0)
                Me.lblTotalFreelanceFees.Text = String.Format("{0:C0}", Round(TotalFreelance, 0))

                Dim dt4 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnThirdPartyCosts(ViewState.Item("BudReqID"))
                Dim TotalThirdParty As Integer = dt4.Rows(0).Item(0)
                Me.lblThirdParty.Text = String.Format("{0:C0}", Round(TotalThirdParty, 0))

                Me.lblThirdPartyRev.Text = String.Format("{0:P0}", TotalThirdParty / Me.numRevenue.Text)

                Me.lblCostsExceed.Text = String.Format("{0:C0}", Round(ViewState.Item("ExceedPercentage") * TotalThirdParty, 0))
            End If
        End If
    End Sub
    Protected Sub RecalculateRates(ByVal sender As Object)
        'This will recalculate the Rates when various fields change
        Dim AnyField As DropDownList = CType(sender, DropDownList)
        Dim gridItem As GridDataItem = CType(AnyField.NamingContainer, GridDataItem)
        Dim SourcesIDField As DropDownList = CType(gridItem("SourcesID").FindControl("SourcesID"), DropDownList)
        Dim SourcesID As String = SourcesIDField.SelectedValue
        Dim RoleIDField As DropDownList = CType(gridItem("RoleID").FindControl("RoleID"), DropDownList)
        Dim RoleID As String = RoleIDField.SelectedValue
        Dim ResourceIDField As RadTextBox = CType(gridItem("Resource").FindControl("Resource"), RadTextBox)
        Dim ResourceID As String = ResourceIDField.Text
        Dim CCIDField As DropDownList = CType(gridItem("CostCenterID").FindControl("CostCenterID"), DropDownList)
        Dim CCID As String = CCIDField.SelectedValue
        Dim CostCCID As String = ""
        Dim SellCCID As String = ""

        If CCID <> "" Then
            'If there's a CCID, need to find the real CCID to pass to Solomon table, to calculate Cost
            Dim Costobj As New PBBRL.EntityClass.xCostCenterProfiles
            Costobj.FetchUsingPK(CCID)
            CostCCID = Costobj.CostCenterId
        End If

        'Need to find the real CCID to pass to Solomon table, to calculate Sell Rate
        Dim obj As New PBBRL.EntityClass.xCostCenterProfiles
        obj.FetchUsingPK(ViewState.Item("CostCenterID"))
        SellCCID = obj.CostCenterId

        'Recalculate Rates
        If SourcesID = "1" Then
            'It's Internal
            Dim FeeRate As Double
            Dim CostRate As Double
            FeeRate = CType(CalculateRates(ViewState.Item("RateCardID"), "BR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", ViewState.Item("CostCenterID"), ""), Double)
            'CostRate = CType(CalculateRates(ViewState.Item("RateCardID"), "CR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", ViewState.Item("CostCenterID"), ""), Double)
            'Costs will now be calculated from one Rate Card for all Projects
            CostRate = CType(CalculateRates("STD", "CR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", CostCCID, ""), Double)

            Dim SellRate As Label = CType(gridItem("SellRate").FindControl("lblSellRate"), Label)
            SellRate.Text = FeeRate
            Dim Cost As RadNumericTextBox = CType(gridItem("Cost").FindControl("Cost"), RadNumericTextBox)
            Cost.Text = CostRate
        Else
            'It's Freelance, only recalculate the Sell
            Dim FeeRate As Double
            FeeRate = CType(CalculateRates(ViewState.Item("RateCardID"), "BR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", ViewState.Item("CostCenterID"), ""), Double)
            Dim SellRate As Label = CType(gridItem("SellRate").FindControl("lblSellRate"), Label)
            SellRate.Text = FeeRate
        End If
    End Sub

    Protected Sub HideCostsTextBoxes(ByVal SourcesID As String, ByVal GridItem As GridDataItem)

        If SourcesID = "4" Then
            'It's a Freelancer
            'Does CostStars = **** or Numbers
            Dim CostStars As RadTextBox = CType(GridItem("Cost").FindControl("CostStars"), RadTextBox)
            If CostStars.Text = "****" Then
                'CostStars = ****, so show txtStars (means user has not altered the Cost from Default)
                GridItem.FindControl("Cost").Visible = False
                GridItem.FindControl("CostStars").Visible = True
                GridItem.FindControl("lblCostStars").Visible = False
            ElseIf CostStars.Text = "" Then
                'CostStars = "", so nothing has been done, so show txtStars (means user has not altered the Cost from Default)
                GridItem.FindControl("Cost").Visible = False
                CType(GridItem.FindControl("CostStars"), RadTextBox).Text = "****"
                GridItem.FindControl("CostStars").Visible = True
                GridItem.FindControl("lblCostStars").Visible = False
            Else
                'CostStars <> ****, so show txtCost (means user has altered the Cost from Default)
                GridItem.FindControl("Cost").Visible = False
                GridItem.FindControl("CostStars").Visible = True
                GridItem.FindControl("lblCostStars").Visible = False
            End If
        ElseIf ViewState.Item("HideCosts") = True Then
            'It's Internal, but Profile says Hide Costs
            GridItem.FindControl("Cost").Visible = False
            GridItem.FindControl("CostStars").Visible = False
            GridItem.FindControl("lblCostStars").Visible = True
        Else
            'It's Internal - Profile says Show Costs
            GridItem.FindControl("Cost").Visible = True
            GridItem.FindControl("CostStars").Visible = False
            GridItem.FindControl("lblCostStars").Visible = False
        End If
    End Sub

    Protected Sub GridCosts_InsertCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridCosts.InsertCommand
        If TypeOf e.Item Is GridEditableItem Then
            'This adds the value of the SubActivity to the SDS
            Dim editedItem As GridEditableItem = TryCast(e.Item, GridEditableItem)
            Dim SubActivityDDL As DropDownList = TryCast(editedItem.FindControl("SubActvID"), DropDownList)
            Dim SubActivityID As String = SubActivityDDL.SelectedValue
            SDSCostColumns.InsertParameters.Add("SubActvID", TypeCode.String, "")
            SDSCostColumns.InsertParameters("SubActvID").DefaultValue = SubActivityID
        End If
    End Sub
    Protected Sub GridCosts_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridCosts.ItemCommand
        If (e.CommandName = RadGrid.InitInsertCommandName) Then
            'This will set teh default value of the IncludeSell Check box
            e.Canceled = True
            'Prepare an IDictionary with the predefined values
            Dim newValues As System.Collections.Specialized.ListDictionary = New System.Collections.Specialized.ListDictionary()
            'set initial checked state for the checkbox on init insert
            newValues("IncludeSell") = True
            'Insert the item and rebind
            e.Item.OwnerTableView.InsertItem(newValues)
        End If
    End Sub
    Protected Sub GridCosts_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles GridCosts.ItemDataBound

        If (TypeOf e.Item Is GridDataInsertItem AndAlso e.Item.IsInEditMode) Then
            'This happens when a row goes into Insert mode
            'Dim GridItem As GridDataInsertItem = CType(e.Item, GridDataInsertItem)
            'Dim MarkupText As RadNumericTextBox = CType(GridItem("Markup").FindControl("Markup"), RadNumericTextBox)
            'MarkupText.Text = ViewState.Item("CostMarkup")
            'Dim ContingencyText As RadNumericTextBox = CType(GridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
            'ContingencyText.Text = ViewState.Item("CostContingency")
        ElseIf (TypeOf e.Item Is GridDataItem) And e.Item.IsInEditMode = False Then
            'This happens everytime a row is bound (refresh, etc)
            Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
            'Get values for the row
            Dim Qty As Integer
            Dim CostRate As Double
            'Dim Contingency, Markup As Double
            'Dim SubTotalNoCont, SubTotal
            Dim Total As Integer

            Dim QtyField As Label = CType(GridItem("Qty").FindControl("lblQty"), Label)
            If QtyField.Text = "" Then
                Qty = 0
            Else
                Qty = QtyField.Text
            End If
            Dim CostRateText As Label = CType(GridItem("CostRate").FindControl("lblCostRate"), Label)
            If CostRateText.Text = "" Then
                CostRate = 0
            Else
                CostRate = CostRateText.Text
            End If
            'Dim ContingencyText As Label = CType(GridItem("Contingency").FindControl("lblContingency"), Label)
            'If ContingencyText.Text = "" Then
            '    Contingency = 0
            'Else
            '    Contingency = Left(ContingencyText.Text, ContingencyText.Text.Length - 2)
            'End If
            'Dim MarkupText As Label = CType(GridItem("Markup").FindControl("lblMarkup"), Label)
            'If MarkupText.Text = "" Then
            '    Markup = 0
            'Else
            '    Markup = Left(MarkupText.Text, MarkupText.Text.Length - 2)
            'End If

            'Find values for this row
            'SubTotalNoCont = Qty * CostRate
            'SubTotal = SubTotalNoCont + (SubTotalNoCont * (Contingency / 100))
            Total = Round(CostRate * Qty, 0)

            'Find values for grid
            'GridCostsSubTotal = GridCostsSubTotal + SubTotal
            GridCOstsTotal = GridCOstsTotal + Total
            'GridCOstsSubTotalNoCont = GridCOstsSubTotalNoCont + SubTotalNoCont

            'Populate row totals
            CType(GridItem.FindControl("lblTotal"), Label).Text = String.Format("{0:C0}", Total)
            'CType(GridItem.FindControl("lblSubTotal"), Label).Text = String.Format("{0:C0}", SubTotal)
        ElseIf (TypeOf e.Item Is GridEditableItem AndAlso e.Item.IsInEditMode) Then
            'This happens when a Row goes into Edit mode
            Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
            'Populate the SubActivity choices
            Dim ActivityField As DropDownList = CType(GridItem("ActvID").FindControl("ActvID"), DropDownList)
            Dim ActivityID As String = ActivityField.SelectedValue
            Dim ActivityName As String = ActivityField.SelectedItem.Text
            If ActivityID = "" Then
            Else
                'Get SubActivity DataSource
                Dim resultSet As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXSubActivitiesLoadAllByCompanyIdisViewable(ViewState("CompanyID"), ActivityID)
                Dim SubActivityDDL As DropDownList = GridItem.FindControl("SubActvID")

                If resultSet.Rows.Count = 0 Then
                    'There are NO SubActivities for this Activity
                    'Add the Activity as the SubActivity
                    NoSubActivities(SubActivityDDL, ActivityName, ActivityID)
                Else
                    'There are SubActivities for this Activity
                    'Update SubActivity List
                    SubActivityDDL.Items.Clear()
                    SubActivityDDL.AppendDataBoundItems = True
                    SubActivityDDL.Items.Add("- Select One -")
                    SubActivityDDL.DataTextField = "SubActvName"
                    SubActivityDDL.DataValueField = "SubActvID"
                    SubActivityDDL.DataSource = resultSet
                End If

                'Populate SubActivity
                Dim BudgetNodeCostsID As Integer = GridItem.GetDataKeyValue("BgetNodeCostID")
                Dim obj As New PBBRL.EntityClass.xBudgetNodeCosts
                obj.FetchUsingPK(BudgetNodeCostsID)
                If obj.SubActvId.HasValue Then
                    Dim SubActivity As Integer = obj.SubActvId
                    SubActivityDDL.SelectedValue = SubActivity
                End If
                SubActivityDDL.DataBind()
            End If
            'Calculate new Totals
            Dim QtyField As RadNumericTextBox = CType(GridItem("Qty").FindControl("Qty"), RadNumericTextBox)
            CalculateRowTotalsCosts(QtyField)
        ElseIf (TypeOf e.Item Is GridFooterItem) Then
            Dim footerItem As GridFooterItem = CType(e.Item, GridFooterItem)
            'footerItem("SubTotal").Text = String.Format("{0:C0}", GridCostsSubTotal)
            'footerItem("SubTotal").HorizontalAlign = HorizontalAlign.Right
            footerItem("CostRate").Controls.Add(New LiteralControl("Total: <br/>"))
            'footerItem("Markup").Controls.Add(New LiteralControl("Contingency Total:"))
            footerItem("CostRate").HorizontalAlign = HorizontalAlign.Right
            footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridCOstsTotal) & " <br/>"))
            'footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridCostsSubTotal - GridCOstsSubTotalNoCont)))
            footerItem("Total").HorizontalAlign = HorizontalAlign.Right
        End If
    End Sub
    Protected Sub GridCosts_UpdateCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridCosts.UpdateCommand

        If TypeOf e.Item Is GridEditableItem Then
            'This adds the value of the SubActivity to the SDS
            Dim editedItem As GridEditableItem = TryCast(e.Item, GridEditableItem)
            Dim SubActivityDDL As DropDownList = TryCast(editedItem.FindControl("SubActvID"), DropDownList)
            Dim SubActivityID As String = SubActivityDDL.SelectedValue
            SDSCostColumns.UpdateParameters.Add("SubActvID", TypeCode.String, "")
            SDSCostColumns.UpdateParameters("SubActvID").DefaultValue = SubActivityID
        End If
    End Sub

    Protected Sub CostsQty_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
        CalculateRowTotalsCosts(sender)
    End Sub
    Protected Sub CostsCostRate_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
        CalculateRowTotalsCosts(sender)
    End Sub
    Protected Sub CostsContingency_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
        CalculateRowTotalsCosts(sender)
    End Sub
    Protected Sub CostsMarkup_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
        CalculateRowTotalsCosts(sender)
    End Sub
    Protected Sub CalculateRowTotalsCosts(ByVal sender As Object)
        'Get values for the row
        Dim QtyValue As Integer
        Dim CostRateValue As Double
        'Dim ContingencyValue, MarkupValue As Double
        'Dim SubTotalNoCont, SubTotal As Integer
        Dim Total As Integer

        Dim AnyField As RadNumericTextBox = CType(sender, RadNumericTextBox)
        Dim gridItem As GridDataItem = CType(AnyField.NamingContainer, GridDataItem)

        Dim Qty As RadNumericTextBox = CType(gridItem("Qty").FindControl("Qty"), RadNumericTextBox)
        If Qty.Text <> Nothing Then
            QtyValue = Integer.Parse(Qty.Text)
        End If
        Dim CostRateText As RadNumericTextBox = CType(gridItem("CostRate").FindControl("CostRate"), RadNumericTextBox)
        If CostRateText.Text <> Nothing Then
            CostRateValue = Double.Parse(CostRateText.Text)
        End If
        'Dim ContingencyText As RadNumericTextBox = CType(gridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
        'If ContingencyText.Text <> Nothing Then
        '    ContingencyValue = Double.Parse(ContingencyText.Text)
        'End If
        'Dim MarkupText As RadNumericTextBox = CType(gridItem("Markup").FindControl("Markup"), RadNumericTextBox)
        'If MarkupText.Text <> Nothing Then
        '    MarkupValue = Double.Parse(MarkupText.Text)
        'End If

        'Find values for this row
        'SubTotalNoCont = QtyValue * CostRateValue
        'SubTotal = SubTotalNoCont + (SubTotalNoCont * (ContingencyValue / 100))
        'Total = SubTotal + (SubTotal * (MarkupValue / 100))
        Total = round(QtyValue * CostRateValue,0)

        'Find values for grid
        'GridCostsSubTotal = GridCostsSubTotal + SubTotal
        GridCOstsTotal = GridCOstsTotal + Total
        'GridCOstsSubTotalNoCont = GridCOstsSubTotalNoCont + SubTotalNoCont

        'Populate row totals
        CType(gridItem.FindControl("lblTotal"), Label).Text = String.Format("{0:C0}", Total)
        'CType(GridItem.FindControl("lblSubTotal"), Label).Text = String.Format("{0:C0}", SubTotal)
    End Sub
    Protected Sub ddlCostCenterNames_SelectedIndexChanged(ByVal o As Object, ByVal e As Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs) Handles ddlCostCenterNames.SelectedIndexChanged
        'When the CC is changed, check to see if this Cost Center hides the COsts int he Grid
        'Get values from Cost Center
        Dim CostCenterID As String = Me.ddlCostCenterNames.SelectedValue
        Dim objCostCenter As New PBBRL.EntityClass.xCostCenterProfiles
        objCostCenter.FetchUsingPK(CostCenterID)
        ViewState.Add("CostCenterID", CostCenterID)
        ViewState.Add("HideCosts", objCostCenter.HideCosts)
        If objCostCenter.ProposalPercentage.HasValue Then
            ViewState.Add("ExceedPercentage", objCostCenter.ProposalPercentage)
            Dim Percentage As Decimal = ViewState.Item("ExceedPercentage") / 100
            Me.lblExceed.Text = String.Format("{0:P0}", (Percentage), 0)
        Else
            ViewState.Add("ExceedPercentage", 0)
            Me.lblExceed.Text = String.Format("{0:P0}", 0, 0)

        End If

        'Calculate Totals
        CalculateTotals()
        'Rebind Grid
        Me.GridFees.Rebind()
    End Sub
    Protected Sub CostsActivityID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim source As DropDownList = CType(sender, DropDownList)
        Dim gridItem As GridDataItem = CType(source.NamingContainer, GridDataItem)
        'Get Variables
        Dim ActivityID As String = source.SelectedValue
        Dim ActivityName As String = source.SelectedItem.Text

        'Get SubActivity DataSource
        Dim resultSet As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXSubActivitiesLoadAllByCompanyIdisViewable(ViewState("CompanyID"), ActivityID)
        Dim SubActivityDDL As DropDownList = gridItem.FindControl("SubActvID")

        If resultSet.Rows.Count = 0 Then
            'There are NO SubActivities for this Activity
            NoSubActivities(SubActivityDDL, ActivityName, ActivityID)
        Else
            'There are SubActivities for this Activity
            'Update SubActivity List
            SubActivityDDL.Items.Clear()
            SubActivityDDL.AppendDataBoundItems = True
            SubActivityDDL.Items.Add("- Select One -")
            SubActivityDDL.DataTextField = "SubActvName"
            SubActivityDDL.DataValueField = "SubActvID"
            SubActivityDDL.DataSource = resultSet
            SubActivityDDL.DataBind()
        End If
    End Sub

    Protected Sub lblDecline_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblDecline.PreRender
        If Me.txtRequestStatus.Text = "" Or Me.txtRequestStatus.Text = "Draft" Or Me.txtRequestStatus.Text = "No Approval Needed" Or Me.txtRequestStatus.Text = "New" Then
            Me.lblDecline.Visible = False
        Else
            Me.lblDecline.Visible = True
        End If
    End Sub
    Protected Sub txtDeclineReason_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtDeclineReason.PreRender
        If Me.txtRequestStatus.Text = "" Or Me.txtRequestStatus.Text = "Draft" Or Me.txtRequestStatus.Text = "No Approval Needed" Or Me.txtRequestStatus.Text = "New" Then
            Me.txtDeclineReason.Visible = False
        Else
            Me.txtDeclineReason.Visible = True
        End If
    End Sub

End Class

2 Answers, 1 is accepted

Sort by
0
Nikolay
Telerik team
answered on 02 May 2008, 12:41 PM
Hi avarndel,

The code you provided seems to be quite complicated so that we could examine it locally and see where the problem might be.

Generally speaking, RadControls for ASP.NET Ajax should be more lightweight as they feature rendering optimizations. Have you been able to narrow the problem down up to a certain scenario, where a specific control of ours is being used? If you manage to do this, you could isolate the problem in a small and running project and send the files to us. You can attach the files to a new support thread.

Also, what exactly are the performance glitches you noticed after the controls upgrade? Any specific info would be of help.

Thanks for your time and involvement.

Regards,
Nick
the Telerik team

Instantly find answers to your questions at the new Telerik Support Center
0
Jason Maronge
Top achievements
Rank 1
answered on 04 May 2008, 02:04 AM
Can you explain what you mean when you say slower?  I have upgraded all of my controls and do not see much of a difference.  Granted when I am testing it is in debug mode, which may be your issue also.  Try setting the   ScriptMode="Release" in the ScriptManager control and see if that helps.  It make a huge difference for me.

Jason
Tags
General Discussions
Asked by
avarndel
Top achievements
Rank 1
Answers by
Nikolay
Telerik team
Jason Maronge
Top achievements
Rank 1
Share this question
or