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

Calculate Total Cost In a Footer

1 Answer 135 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Muhammad
Top achievements
Rank 1
Muhammad asked on 01 Jun 2011, 04:30 PM
Hi,

I am using telerik Nested Grid which consists of Two Detail Tables One is for groups and the other is for items. I have placed my lblTotalCost in a footertemplate of group and I want to calculate the total cost programatically but this works fine when the grid loads but when I update and insert and item in a grid a problem occurs. I am calculating total cost Using my CalculateTotalCost Method.

Any help would be greatly appreciated.


<telerik:RadGrid ID="rgQuotation" runat="server" Width="95%" ShowStatusBar="true" Skin="Vista" Font-Names="Verdana"
          AutoGenerateHierarchy="true" HierarchyLoadMode="ServerBind" AutoGenerateColumns="False"
          PageSize="20" AllowSorting="True" AllowMultiRowSelection="False" AllowPaging="True"
           ShowFooter="True">
          <PagerStyle Mode="NumericPages"></PagerStyle>
          <MasterTableView Width="100%" DataKeyNames="ID" AllowMultiColumnSorting="True" CommandItemDisplay="Top" HierarchyDefaultExpanded="true" HierarchyLoadMode="ServerOnDemand"
              Name="Quotation" CssClass="DetailTable_Default" >
              <Columns>
                  <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn"
                      ItemStyle-Width="30px" EditImageUrl="~/Portals/0/Images/Edit.gif">
                  </telerik:GridEditCommandColumn>
                  <telerik:GridBoundColumn SortExpression="ID" HeaderText="ID" HeaderButtonType="TextButton"
                      DataField="ID" UniqueName="ID" ReadOnly="true" Visible="false">
                  </telerik:GridBoundColumn>
                  <telerik:GridBoundColumn SortExpression="TariffName" HeaderText="Quotation Name"
                      HeaderButtonType="TextButton" DataField="TariffName" UniqueName="TariffName"
                      ReadOnly="true">
                  </telerik:GridBoundColumn>
                  <telerik:GridBoundColumn SortExpression="RecordType" HeaderText="Rec Type" HeaderButtonType="TextButton"
                      DataField="RecordType" UniqueName="RecordType" ReadOnly="true" Visible="false">
                  </telerik:GridBoundColumn>
                  <telerik:GridBoundColumn SortExpression="JobID" HeaderText="Job No" HeaderButtonType="TextButton"
                      DataField="JobID" UniqueName="JobID" ReadOnly="true" Visible="false">
                  </telerik:GridBoundColumn>
              </Columns>
              <EditFormSettings EditFormType="Template" InsertCaption="New Quotation">
                  <FormTemplate>
                      <div>
                          <asp:Label ID="lblTariffName" runat="server" Text="Quotation Name" CssClass="fieldsetControlStyle"></asp:Label>
                             
                          <asp:TextBox ID="txtTariffName" runat="server" Text='<%# Eval("TariffName") %>'></asp:TextBox>
                          <asp:LinkButton ID="lnkbtnUpdate" runat="server" CausesValidation="True" CommandName='<%# IIf( DataBinder.Eval(Container, "OwnerTableView.IsItemInserted"), "PerformInsert", "Update") %>'
                              CssClass="lnkButton" ToolTip="Update">
                              <asp:Image ID="imgUpdate" runat="server" ImageUrl="~/Portals/0/Images/Update.gif" /></asp:LinkButton>
                           <asp:LinkButton ID="lnkbtnCancel" runat="server" CausesValidation="False" CommandName="Cancel"
                              CssClass="lnkButton" ToolTip="Cancel">
                              <asp:Image ID="imgCancel" runat="server" ImageUrl="~/Portals/0/Images/Cancel.gif" /></asp:LinkButton>
                      </div>
                  </FormTemplate>
              </EditFormSettings>
              <DetailTables>
                  <telerik:GridTableView DataKeyNames="GroupID" HierarchyLoadMode="ServerBind" Width="100%" HierarchyDefaultExpanded="true"
                      CommandItemDisplay="Top" runat="server" Name="Groups" CssClass="DetailTable_Default" >
                      <Columns>
                          <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn"
                              ItemStyle-Width="30px" EditImageUrl="~/Portals/0/Images/Edit.gif">
                          </telerik:GridEditCommandColumn>
                          <telerik:GridBoundColumn SortExpression="GroupID" HeaderText="GroupID" HeaderButtonType="TextButton"
                              DataField="GroupID" UniqueName="GroupID" ReadOnly="true" Visible="false">
                          </telerik:GridBoundColumn>
                          <telerik:GridBoundColumn SortExpression="GroupName" HeaderText="Group Name" HeaderButtonType="TextButton"
                              DataField="GroupName" UniqueName="GroupName">
                              <ItemStyle Font-Bold="true" />
                          </telerik:GridBoundColumn>
                          <telerik:GridBoundColumn SortExpression="TariffID" HeaderText="TariffID" HeaderButtonType="TextButton"
                              DataField="TariffID" UniqueName="TariffID" ReadOnly="true" Visible="false">
                          </telerik:GridBoundColumn>
                          <telerik:GridTemplateColumn>
                              <FooterTemplate>
                                                       
                                  <asp:Label ID="lblTotalCost" runat="server" Text="Total Cost" Font-Bold="true" CssClass="lblTotalCost"></asp:Label>
                              </FooterTemplate>
                          </telerik:GridTemplateColumn>
                      </Columns>
                      <EditFormSettings EditFormType="Template" InsertCaption="New Group">
                          <FormTemplate>
                              <div>
                                  <asp:Label ID="lblGroupName" runat="server" Text="Group Name" CssClass="fieldsetControlStyle"></asp:Label>
                                     
                                  <asp:TextBox ID="txtGroupName" runat="server" Text='<%# Eval("groupname") %>'></asp:TextBox>
                                  <br />
                                  <asp:LinkButton ID="lnkbtnUpdate" runat="server" CausesValidation="True" CommandName='<%# IIf( DataBinder.Eval(Container, "OwnerTableView.IsItemInserted"), "PerformInsert", "Update") %>'
                                      CssClass="lnkButton">
                                      <asp:Image ID="imgUpdate" runat="server" ImageUrl="~/Portals/0/Images/Update.gif" /></asp:LinkButton>
                                   <asp:LinkButton ID="lnkbtnCancel" runat="server" CausesValidation="False" CommandName="Cancel"
                                      CssClass="lnkButton" ToolTip="Cancel">
                                      <asp:Image ID="imgCancel" runat="server" ImageUrl="~/Portals/0/Images/Cancel.gif" /></asp:LinkButton>
                              </div>
                          </FormTemplate>
                      </EditFormSettings>
                      <CommandItemSettings AddNewRecordText="Add New Group" AddNewRecordImageUrl="~/Portals/0/Images/AddRecord.gif"
                          ShowRefreshButton="false" />
                      <DetailTables>
                          <telerik:GridTableView DataKeyNames="ID" Width="100%" Name="Items" CommandItemDisplay="Top" CssClass="DetailTable_Default!" 
                              EditMode="InPlace" runat="server" HierarchyLoadMode="Client">
                              <Columns>
                                  <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn"
                                      UpdateImageUrl="~/Portals/0/Images/Update.gif" ItemStyle-Width="40px" EditImageUrl="~/Portals/0/Images/Edit.gif"
                                      CancelImageUrl="~/Portals/0/Images/Cancel.gif">
                                  </telerik:GridEditCommandColumn>
                                  <telerik:GridBoundColumn SortExpression="ID" HeaderText="ID" HeaderButtonType="TextButton"
                                      DataField="ID" UniqueName="ID" ReadOnly="true" Visible="false">
                                  </telerik:GridBoundColumn>
                                  <telerik:GridBoundColumn SortExpression="ItemOrder" HeaderText="ItemOrder" HeaderButtonType="TextButton"
                                      DataField="ItemOrder" UniqueName="ItemOrder" ReadOnly="true" Visible="false">
                                  </telerik:GridBoundColumn>
                                  <%--                            <telerik:GridBoundColumn SortExpression="ItemName" HeaderText="Item Name" DataField="ItemName"
                              UniqueName="ItemName">
                              UniqueName="ItemName">
                          </telerik:GridBoundColumn>--%>
                                  <telerik:GridTemplateColumn HeaderText="Item Name">
                                      <ItemTemplate>
                                          <asp:Label ID="lblItemName" runat="server" Text='<%# Eval("ItemName") %>'></asp:Label>
                                      </ItemTemplate>
                                      <EditItemTemplate>
                                          <asp:TextBox ID="txtItemName" runat="server" Text='<%# Eval("ItemName") %>'></asp:TextBox>
                                          <asp:RequiredFieldValidator ID="rfvtxtItemName" runat="server" ErrorMessage="!" Display="Dynamic"
                                              ControlToValidate="txtItemName"></asp:RequiredFieldValidator>
                                      </EditItemTemplate>
                                      <ItemStyle Width="30%" />
                                  </telerik:GridTemplateColumn>
                                  <telerik:GridTemplateColumn HeaderText="Rate">
                                      <ItemTemplate>
                                          <asp:Label ID="lblUnits" runat="server" Text='<%# Eval("Units") %>'></asp:Label>
                                      </ItemTemplate>
                                      <EditItemTemplate>
                                          <telerik:RadNumericTextBox ID="rntbRate" ShowSpinButtons="true" IncrementSettings-InterceptArrowKeys="true"
                                              IncrementSettings-InterceptMouseWheel="true" runat="server" Type="Number" Width="80px"
                                              DbValue='<%# Eval("Units") %>' NumberFormat-DecimalDigits="2" MinValue="1" IncrementSettings-Step="1"
                                              CssClass="fieldsetControlWidth fieldsetLine" />
                                      </EditItemTemplate>
                                  </telerik:GridTemplateColumn>
                                  <telerik:GridTemplateColumn HeaderText="Quantity">
                                      <ItemTemplate>
                                          <asp:Label ID="lblQuantity" runat="server" Text='<%# Eval("Quantity") %>'></asp:Label>
                                      </ItemTemplate>
                                      <EditItemTemplate>
                                          <telerik:RadNumericTextBox ID="rntbQuantity" ShowSpinButtons="true" IncrementSettings-InterceptArrowKeys="true"
                                              IncrementSettings-InterceptMouseWheel="true" runat="server" Type="Number" Width="80px"
                                              DbValue='<%# Eval("Quantity") %>' NumberFormat-DecimalDigits="0" MinValue="0"
                                              IncrementSettings-Step="1" CssClass="fieldsetControlWidth fieldsetLine">
                                              <ClientEvents OnBlur="Blur" OnFocus="Focus" />
                                          </telerik:RadNumericTextBox>
                                      </EditItemTemplate>
                                  </telerik:GridTemplateColumn>
                                  <telerik:GridTemplateColumn HeaderText="C.P">
                                      <ItemTemplate>
                                          <asp:Label ID="lblCostPrice" runat="server" Text='<%# Format(DataBinder.Eval(Container.DataItem,"CostPrice"),"###,##0.00") %>'></asp:Label>
                                      </ItemTemplate>
                                      <EditItemTemplate>
                                          <telerik:RadNumericTextBox ID="rntbCostPrice" ShowSpinButtons="true" IncrementSettings-InterceptArrowKeys="true"
                                              IncrementSettings-InterceptMouseWheel="true" runat="server" Type="Number" Width="80px"
                                              DbValue='<%# Eval("CostPrice") %>' NumberFormat-DecimalDigits="2" MinValue="0"
                                              IncrementSettings-Step="1" CssClass="fieldsetControlWidth fieldsetLine" />
                                      </EditItemTemplate>
                                  </telerik:GridTemplateColumn>
                                  <telerik:GridTemplateColumn HeaderText="S.P">
                                      <ItemTemplate>
                                          <asp:Label ID="lblSellingPrice" runat="server" Text='<%# Format(DataBinder.Eval(Container.DataItem,"SellingPrice"),"###,##0.00") %>'></asp:Label>
                                      </ItemTemplate>
                                      <EditItemTemplate>
                                          <telerik:RadNumericTextBox ID="rntbSellingPrice" ShowSpinButtons="true" IncrementSettings-InterceptArrowKeys="true"
                                              IncrementSettings-InterceptMouseWheel="true" runat="server" Type="Number" Width="80px"
                                              DbValue='<%# Eval("SellingPrice") %>' NumberFormat-DecimalDigits="2" MinValue="0"
                                              IncrementSettings-Step="1" CssClass="fieldsetControlWidth fieldsetLine" />
                                      </EditItemTemplate>
                                  </telerik:GridTemplateColumn>
                                  <telerik:GridCalculatedColumn HeaderText="C.P Total" DataType="System.Double" FooterText="C.P Total : "
                                      UniqueName="TotalCostPrice" DataFields="CostPrice,Units,Quantity" Expression="{0}/{1}*{2}"
                                      Aggregate="Sum" DataFormatString="{0:###,##0.00}" FooterAggregateFormatString="{0:£###,##0.00}" />
                                  <telerik:GridCalculatedColumn HeaderText="S.P Total " UniqueName="TotalSellingPrice"
                                      DataFields="SellingPrice,Units,Quantity" Expression="{0}/{1}*{2}" DataType="System.Double"
                                      FooterAggregateFormatString="{0:£###,##0.00}" FooterText="S.P Total : " Aggregate="Sum"
                                      DataFormatString="{0:###,##0.00}" />
                              </Columns>
                              <CommandItemSettings AddNewRecordText="Add New Item" AddNewRecordImageUrl="~/Portals/0/Images/AddRecord.gif"
                                  ShowRefreshButton="false" />
                              <%--<EditFormSettings EditFormType="Template" InsertCaption="New Item">
                          <FormTemplate>
                              <div>
                                  <asp:Label ID="lblItemName" runat="server" Text="Item Name" CssClass="fieldsetControlStyle"></asp:Label>
                                     
                                  <asp:TextBox ID="txtItemName" runat="server" Text='<%# Eval("ItemName") %>'></asp:TextBox>
                                  <br />
                                  <asp:Label ID="lblRate" runat="server" Text="Rate" CssClass="fieldsetControlStyle"></asp:Label>
                                               
                                  <asp:TextBox ID="txtRate" runat="server" Text='<%# Eval("Units") %>'></asp:TextBox>
                                  <br />
                                  <asp:Label ID="lblQuantity" runat="server" Text="Quantity"></asp:Label>
                                  <telerik:RadNumericTextBox ID="rntbQuantity" ShowSpinButtons="true" IncrementSettings-InterceptArrowKeys="true"
                                      IncrementSettings-InterceptMouseWheel="true" runat="server" Type="Number" Width="80px"
                                      NumberFormat-DecimalDigits="0" MinValue="0" IncrementSettings-Step="1" CssClass="fieldsetControlWidth fieldsetLine" />
                                  <br />
                                  <asp:Label ID="lblCostPrice" runat="server" Text="Cost Price" CssClass="fieldsetControlStyle"></asp:Label>
                                      
                                  <telerik:RadNumericTextBox ID="rntbCostPrice" MinValue="0" runat="server" MaxLength="6"
                                      DbValue='<%# Bind("CostPrice") %>' Width="160px" Type="Currency" Culture="English (United Kingdom)">
                                  </telerik:RadNumericTextBox>
                                  <br />
                                  <asp:Label ID="lblSellingPrice" runat="server" Text="Selling Price" CssClass="fieldsetControlStyle"></asp:Label>
                                    
                                  <telerik:RadNumericTextBox ID="rntbSellingPrice" MinValue="0" runat="server" MaxLength="6"
                                      DbValue='<%# Bind("SellingPrice") %>' Width="160px" Type="Currency" Culture="English (United Kingdom)">
                                  </telerik:RadNumericTextBox>
                                  <br />
                                  <br />
                                  <asp:LinkButton ID="lnkbtnUpdate" runat="server" CausesValidation="True" CommandName='<%# IIf( DataBinder.Eval(Container, "OwnerTableView.IsItemInserted"), "PerformInsert", "Update") %>'
                                      CssClass="lnkButton" ToolTip="Update">
                                      <asp:Image ID="imgUpdate" runat="server" ImageUrl="~/Portals/0/Images/Update.gif" /></asp:LinkButton>
                                   <asp:LinkButton ID="lnkbtnCancel" runat="server" CausesValidation="False" CommandName="Cancel"
                                      CssClass="lnkButton" ToolTip="Cancel">
                                      <asp:Image ID="imgCancel" runat="server" ImageUrl="~/Portals/0/Images/Cancel.gif" /></asp:LinkButton>
                              </div>
                          </FormTemplate>
                          <%-- <EditColumn ButtonType="ImageButton" InsertText="Insert Item" UpdateText="Update Item"
                              UpdateImageUrl="~/Portals/0/Images/Update.gif" InsertImageUrl="~/Portals/0/Images/Update.gif"
                              UniqueName="EditCommandColumn1" CancelText="Cancel edit">
                          </EditColumn>
                      </EditFormSettings>--%>
                          </telerik:GridTableView>
                      </DetailTables>
                  </telerik:GridTableView>
              </DetailTables>
              <CommandItemSettings AddNewRecordText="Add new Quotation" AddNewRecordImageUrl="~/Portals/0/Images/AddRecord.gif"
                  ShowRefreshButton="false" ShowExportToPdfButton="true" />
          </MasterTableView>
          <ClientSettings AllowKeyboardNavigation="true" EnableRowHoverStyle="true">
              <ClientEvents OnRowContextMenu="RowContextMenu" OnRowDblClick="RowDblClick" />
              <Selecting AllowRowSelect="true" />
              <KeyboardNavigationSettings EnableKeyboardShortcuts="true" AllowSubmitOnEnter="true"
                  AllowActiveRowCycle="true" CollapseDetailTableKey="LeftArrow" ExpandDetailTableKey="RightArrow" />
          </ClientSettings>
      </telerik:RadGrid>

Protected Sub CalculateTotalCost(Optional ByVal e As Telerik.Web.UI.GridItemEventArgs = Nothing)

For Each gdiQuotation As GridDataItem In rgQuotation.MasterTableView.Items
 
           pdTotalCost = 0
 
           For Each gdiGroups As GridDataItem In gdiQuotation.ChildItem.NestedTableViews(0).Items
 
               For Each gdiItems In gdiGroups.ChildItem.NestedTableViews(0).Items
 
                   pdTotalCost = pdTotalCost + Convert.ToDecimal(gdiItems("TotalCostPrice").Text)
 
                   Dim nestedView As GridTableView = gdiQuotation.ChildItem.NestedTableViews(0)
 
                   For Each childfooter As GridFooterItem In nestedView.GetItems(GridItemType.Footer)
 
                       Dim lblTotalCost As Label = DirectCast(childfooter.FindControl("lblTotalCost"), Label)
 
                       lblTotalCost.Text = "Total C.P £" + pdTotalCost.ToString()
 
                   Next
 
               Next
 
           Next
 
       Next

End Sub

Protected Sub rgQuotation_ItemDataBound(ByVal source As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles rgQuotation.ItemDataBound

        If TypeOf e.Item Is GridDataItem And e.Item.OwnerTableView.Name = "Items" Then          

            CalculateTotalCost()

        ElseIf TypeOf e.Item Is GridFooterItem And e.Item.OwnerTableView.Name = "Groups" Then

           CalculateTotalCost()

        End If


    End Sub

1 Answer, 1 is accepted

Sort by
0
Marin
Telerik team
answered on 02 Jun 2011, 05:42 PM
Hello Muhammad,

 Can you elaborate a little bit more on the problem? What exactly is happening - the value is not calculated properly or the label is blank or you get some error? You should make sure the CalculateTotalCost method is called after the item is inserted / updated. Another option would be if you try to move the logic from the Item_DataBound event to the Page_PreRender event where you will need to manually traverse the items in the hierarchy and calculate the specific value.

Kind regards,
Marin
the Telerik team

Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.

Tags
Grid
Asked by
Muhammad
Top achievements
Rank 1
Answers by
Marin
Telerik team
Share this question
or