You can calculate footer totals client-side having RadNumericTextBoxes in the RadGrid rows and footer. The sums are calculated dynamically with JavaScript wiring the OnFocus and OnBlur events of RadInput. Additionally, for easy extraction of the input values, the code takes advantage of the Client-side API of the RadNumericTextBox and its get_value()/set_value(val) methods.
Keep in mind that the changes made by the user will be lost on subsequent postbacks. If you want to keep the new entries during the page lifecycle, you will need to pass them server-side with custom code logic and refresh the grid source accordingly.
<telerik:RadAjaxManagerID="Manager1"runat="server"><AjaxSettings><telerik:AjaxSettingAjaxControlID="RadGrid1"><UpdatedControls><telerik:AjaxUpdatedControlControlID="RadGrid1"/></UpdatedControls></telerik:AjaxSetting></AjaxSettings></telerik:RadAjaxManager><pstyle="font: normal 11px arial,sans-serif"><asp:LabelID="lbl"runat="server"BackColor="Beige"Text="Change arbitrary freight value to recalculate the footer total client-side"/></p><telerik:RadGridRenderMode="Lightweight"ID="RadGrid1"runat="server"AllowPaging="True"DataSourceID="SqlDataSource1"Skin="Silk"GridLines="None"OnItemDataBound="RadGrid1_ItemDataBound"><ExportSettings><PdfFontType="Subset"PaperSize="Letter"/><ExcelFormat="Html"/><CsvColumnDelimiter="Comma"RowDelimiter="NewLine"/></ExportSettings><MasterTableViewShowFooter="true"AutoGenerateColumns="False"CommandItemDisplay="None"CurrentResetPageIndexAction="SetPageIndexToFirst"DataKeyNames="OrderID"DataSourceID="SqlDataSource1"Dir="LTR"Frame="Border"TableLayout="Auto"><RowIndicatorColumnCurrentFilterFunction="NoFilter"FilterListOptions="VaryByDataType"Visible="False"><HeaderStyleWidth="20px"/></RowIndicatorColumn><ExpandCollapseColumnCurrentFilterFunction="NoFilter"FilterListOptions="VaryByDataType"Resizable="False"Visible="False"><HeaderStyleWidth="20px"/></ExpandCollapseColumn><Columns><telerik:GridBoundColumnCurrentFilterFunction="NoFilter"DataField="OrderID"DataType="System.Int32"FilterListOptions="VaryByDataType"ForceExtractValue="None"HeaderText="OrderID"ReadOnly="True"SortExpression="OrderID"UniqueName="OrderID"></telerik:GridBoundColumn><telerik:GridBoundColumnCurrentFilterFunction="NoFilter"DataField="ShippedDate"DataType="System.DateTime"FilterListOptions="VaryByDataType"ForceExtractValue="None"HeaderText="ShippedDate"SortExpression="ShippedDate"UniqueName="ShippedDate"></telerik:GridBoundColumn><telerik:GridBoundColumnCurrentFilterFunction="NoFilter"DataField="ShipCity"FilterListOptions="VaryByDataType"ForceExtractValue="None"HeaderText="ShipCity"SortExpression="ShipCity"UniqueName="ShipCity"></telerik:GridBoundColumn><telerik:GridTemplateColumnUniqueName="Template1"><ItemTemplate><telerik:RadNumericTextBoxRenderMode="Lightweight"ID="TextBox1"runat="server"DbValue='<%#Eval("Freight")%>'><ClientEventsOnBlur="Blur"OnFocus="Focus"/></telerik:RadNumericTextBox></ItemTemplate><FooterTemplate><telerik:RadNumericTextBoxRenderMode="Lightweight"ID="TextBox2"runat="server"><ClientEventsOnLoad="Load"/></telerik:RadNumericTextBox></FooterTemplate></telerik:GridTemplateColumn></Columns><EditFormSettings><EditColumnCurrentFilterFunction="NoFilter"FilterListOptions="VaryByDataType"></EditColumn></EditFormSettings></MasterTableView><ClientSettings></ClientSettings><PagerStyleMode="NextPrevAndNumeric"/></telerik:RadGrid><br/><asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"SelectCommand="SELECT [OrderID], [ShippedDate], [ShipCity], [Freight] FROM [Orders]"></asp:SqlDataSource>
C#
double sum =0;protectedvoidRadGrid1_ItemDataBound(object sender,GridItemEventArgs e){if(e.Item isGridDataItem){GridDataItem dataItem =(GridDataItem)e.Item;
sum +=double.Parse((dataItem["Template1"].FindControl("TextBox1")asRadNumericTextBox).Value.ToString());}elseif(e.Item isGridFooterItem){GridFooterItem footer =(GridFooterItem)e.Item;
footer["ShipCity"].Controls.Add(newLiteralControl("<span style='color: Black; font-weight: bold;'>Total freight on this page is:</span> "));(footer["Template1"].FindControl("TextBox2")asRadNumericTextBox).Value = Double.Parse(sum.ToString());}}
VB
Private sum AsDouble=0ProtectedSub RadGrid1_ItemDataBound(ByVal sender AsObject,ByVal e As GridItemEventArgs)IfTypeOf e.Item Is GridDataItem ThenDim dataItem As GridDataItem =DirectCast(e.Item, GridDataItem)
sum +=Double.Parse((TryCast(dataItem("Template1").FindControl("TextBox1"), RadNumericTextBox)).Value.ToString())ElseIfTypeOf e.Item Is GridFooterItem ThenDim footer As GridFooterItem =DirectCast(e.Item, GridFooterItem)
footer("ShipCity").Controls.Add(New LiteralControl("<span style='color: Black; font-weight: bold;'>Total freight on this page is:</span> "))Dim numericTextBox As RadNumericTextBox =CType(footer("Template1").FindControl("TextBox2"), RadNumericTextBox)
numericTextBox.Value =Double.Parse(sum.ToString())EndIfEndSub