Here is the scenario:
Attached screenshot shows the grid I am dealing with to give a clear idea...
- I have a RadGrid with 3 columns -- Qty -- Description -- Price Per
- Data comes in from the server - as a list of items you can select
- The Qty column is a RadNumbericTextbox with spinner buttons -- Price Per is set from the database
- When you change the Qty, I want to recalculate the total of all lines for the entire grid and show it in a separate RadNumbericTextbox outside of the RadGrid
- The math is the sum of Qty * Price Per for all lines.
Attached screenshot shows the grid I am dealing with to give a clear idea...
2 Answers, 1 is accepted
0
Accepted

Jayesh Goyani
Top achievements
Rank 2
answered on 24 Apr 2012, 10:09 AM
Hello Dan,
Please check below code snippet.
JS
.aspx
.aspx.cs
Note : If you not able to find the quantity control from grid then use below method.
Thanks,
Jayesh Goyani
Please check below code snippet.
JS
<telerik:RadCodeBlock ID=
"RadCodeBlock"
runat=
"server"
>
<script type=
"text/javascript"
>
function
ValueChanged(sender, args) {
var
grid = $find(
"<%=RadGrid1.ClientID %>"
);
var
totalAmount = 0;
if
(grid) {
var
MasterTable = grid.get_masterTableView();
var
Rows = MasterTable.get_dataItems();
for
(
var
i = 0; i < Rows.length; i++) {
var
row = Rows[i];
var
txtQuntity = row.findControl(
"txtQuntity"
);
var
price = parseFloat(row.getDataKeyValue(
"Price"
));
totalAmount = totalAmount + (parseFloat(txtQuntity.get_value()) * parseFloat(price));
}
}
var
RadNumericTextBox1 = $find(
"<%=RadNumericTextBox1.ClientID %>"
);
RadNumericTextBox1.set_value(totalAmount);
}
</script>
</telerik:RadCodeBlock>
.aspx
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
</
telerik:RadScriptManager
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AutoGenerateColumns
=
"false"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
>
<
MasterTableView
DataKeyNames
=
"Price"
ClientDataKeyNames
=
"Price"
Name
=
"parent"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"Price"
UniqueName
=
"Price"
HeaderText
=
"Price"
>
</
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
>
<
ItemTemplate
>
<
telerik:RadNumericTextBox
ID
=
"txtQuntity"
runat
=
"server"
ShowSpinButtons
=
"true"
Value
=
"1"
MinValue
=
"1"
AllowOutOfRangeAutoCorrect
=
"true"
>
<
NumberFormat
DecimalDigits
=
"0"
/>
<
ClientEvents
OnValueChanged
=
"ValueChanged"
/>
</
telerik:RadNumericTextBox
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
<
br
/>
<
telerik:RadNumericTextBox
ID
=
"RadNumericTextBox1"
runat
=
"server"
>
</
telerik:RadNumericTextBox
>
.aspx.cs
protected
void
RadGrid1_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
{
DateTime dt =
new
DateTime();
dynamic data =
new
[] {
new
{ ID = 1, Name =
"Name1"
, customdate=dt,Price = 1.1},
new
{ ID = 2, Name =
"Name2"
, customdate=dt,Price = 1.1},
new
{ ID = 3, Name =
"Name3"
, customdate=dt,Price = 1.1},
new
{ ID = 4, Name =
"Name4"
, customdate=dt,Price = 1.1},
new
{ ID = 5, Name =
"Name5"
, customdate=dt,Price = 1.1}
};
RadGrid1.DataSource = data;
}
Note : If you not able to find the quantity control from grid then use below method.
var
txtQuntity
= $(row.get_element()).find(
"input[id*='txtQuntity']"
).get(0);
var
txtQuntity
= $telerik.findControl(row.get_element(),
"txtQuntity"
);
Thanks,
Jayesh Goyani
0

Dan
Top achievements
Rank 1
answered on 24 Apr 2012, 06:20 PM
Thanks for the quick help. That looks about right. Here is what I ended up doing:
var totalAddons = 0.00;
function calcAddons(sender, args) {
// First roll back any Addon Calculations
$get("TotalOptional").value = ($get("TotalOptional").value - totalAddons).toFixed(2);
// Clear out Addons and recalc
totalAddons = 0.00;
var grid = $find("<%= OptionalAddons.ClientID %>");
var masterTable = grid.get_masterTableView();
for (var i = 0; i < masterTable.get_dataItems().length; i++) {
var dataItem = masterTable.get_dataItems()[i];
var unitPrice = dataItem.getDataKeyValue("UnitPrice").replace(",", "");
var cell = masterTable.getCellByColumnUniqueName(dataItem, "Quantity");
var numberBox = cell.getElementsByTagName("INPUT")[0];
if (numberBox && numberBox.value) {
totalAddons += unitPrice * parseFloat(numberBox.value);
}
}
// Update the numbers
$get("TotalOptional").value = (parseFloat($get("TotalOptional").value) + totalAddons).toFixed(2);
}
<
telerik:RadGrid
runat
=
"server"
ID
=
"OptionalAddons"
AllowPaging
=
"false"
AllowMultiRowSelection
=
"true"
Width
=
"100%"
AllowSorting
=
"true"
AutoGenerateColumns
=
"False"
OnNeedDataSource
=
"OptionalAddons_NeedDataSource"
Skin
=
"Metro"
ShowFooter
=
"false"
>
<
ClientSettings
AllowColumnsReorder
=
"true"
ReorderColumnsOnClient
=
"true"
EnableRowHoverStyle
=
"false"
ColumnsReorderMethod
=
"Reorder"
>
<
Selecting
AllowRowSelect
=
"false"
EnableDragToSelectRows
=
"true"
/>
<
Resizing
ClipCellContentOnResize
=
"false"
AllowColumnResize
=
"true"
AllowResizeToFit
=
"true"
EnableRealTimeResize
=
"true"
/>
</
ClientSettings
>
<
MasterTableView
DataKeyNames
=
"AddOnID,Quantity,UnitPrice"
ClientDataKeyNames
=
"AddOnID,Quantity,UnitPrice"
AllowMultiColumnSorting
=
"true"
CommandItemDisplay
=
"None"
EnableNoRecordsTemplate
=
"true"
>
<
NoRecordsTemplate
>
<
div
style
=
"padding: 4px 2px"
>
-- No Optional Add-ons Available --</
div
>
</
NoRecordsTemplate
>
<
Columns
>
<%--<
telerik:GridClientSelectColumn
UniqueName
=
"ClientSelectColumn"
HeaderStyle-Width
=
"35"
/>--%>
<
telerik:GridTemplateColumn
HeaderText
=
"Qty"
UniqueName
=
"Quantity"
SortExpression
=
"Quantity"
HeaderStyle-Width
=
"75"
ItemStyle-CssClass
=
"centerAlign"
ItemStyle-HorizontalAlign
=
"Center"
HeaderStyle-HorizontalAlign
=
"Center"
>
<
ItemTemplate
>
<
telerik:RadNumericTextBox
runat
=
"server"
ID
=
"Qty"
Value
=
"0"
NumberFormat-DecimalDigits
=
"0"
Width
=
"50"
EnabledStyle-HorizontalAlign
=
"Right"
CssClass
=
"textbox rounded shadow hovershadow"
ShowSpinButtons
=
"true"
MinValue
=
"0"
MaxValue
=
"10"
>
<
ClientEvents
OnValueChanged
=
"calcAddons"
/>
</
telerik:RadNumericTextBox
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Add-Ons Included in Selected Package"
UniqueName
=
"Description"
SortExpression
=
"Description"
>
<
ItemTemplate
>
<%# DataBinder.Eval(Container.DataItem, "Description")%>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridNumericColumn
Aggregate
=
"Sum"
DataField
=
"UnitPrice"
DataType
=
"System.Decimal"
HeaderText
=
"Price Per"
UniqueName
=
"UnitPrice"
DataFormatString
=
"{0:N2}"
ItemStyle-HorizontalAlign
=
"Right"
FooterStyle-CssClass
=
"rightAlign"
ItemStyle-CssClass
=
"rightAlign"
HeaderStyle-HorizontalAlign
=
"Right"
/>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>