I am using RadGrid to capture the details with EditMode="InPlace".
In my RadGrid there are 4 columns:
1. Qty
2. UnitPrice
3. TotalAmount
4. ProductAge
Now, Qty, UnitPrice, TotalAmount columns are GridNumericColumn.& ProductAge is GridDropDownColumn.
For Editmde i am using GridNumericColumnEditor & GridDropDownListColumnEditor.
When i double click on row i get the Row in Editable mode but the issue is:
> OnBlur, at client-side, of Qty/UnitPrice, i want to calculate the values and update the TotalAmount field in the grid itself.
I have searched most of the pages regarding the RadGrid in Edit Mode with Inplace for my scenario but i did not get any solution.
Please help me as soon as possible because i spent almost a day on it.
Thanks in advance.
Regards,
Mahendra
3 Answers, 1 is accepted
Try the following code snippet to attach 'onblur' event to GridNumericColumn.
ASPX:
<MasterTableView CommandItemDisplay="Top" EditMode="InPlace"> <Columns> <telerik:GridNumericColumn UniqueName="Qty" DataField="total" > </telerik:GridNumericColumn> . . . . . . </Columns>C#:
protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e) { if (e.Item is GridEditableItem && e.Item.IsInEditMode) { GridEditableItem editItem = (GridEditableItem)e.Item; RadNumericTextBox txtboxqty = (RadNumericTextBox)editItem["Qty"].Controls[0]; txtboxqty.Attributes.Add("onblur", "qtyonblur();"); } }Java Script:
<script type="text/javascript"> function qtyonblur() {
}</script>Thanks,
Princy.
GRID:
<telerik:RadScriptManager ID="RadScriptManager1" runat="server"></telerik:RadScriptManager >
<telerik:RadCodeBlock ID="RadCodeBlock1" runat ="server">
<script type ="text/javascript">
var hasChanges, inputs, dropdowns, editedRow;
function RowClick(sender, eventArgs) {
if (editedRow && hasChanges)
{ hasChanges = false ;
if (confirm("Update changes?"
$find(
"<%= RadGrid1.MasterTableView.ClientID %>").updateItem(editedRow);
}
}
}
function
editedRow = eventArgs.get_itemIndexHierarchical();
$find(
"<%= RadGrid1.MasterTableView.ClientID %>"
}
function
if (args.get_commandName() != "Edit"
editedRow =
null ;
}
}
function
var gridElement = sender.get_element();
var elementsToUse = [];
inputs = gridElement.getElementsByTagName(
"input" );
for (var i = 0; i < inputs.length; i++) {
var lowerType = inputs[i].type.toLowerCase();
if (lowerType == "hidden" || lowerType == "button"
continue ; }
Array.add(elementsToUse, inputs[i]);
inputs[i].onchange = TrackChanges;
}
dropdowns = gridElement.getElementsByTagName(
"select");
for (var
dropdowns[i].onchange = TrackChanges;
}
setTimeout(
function () { if
}
function
hasChanges =
true ; }
function
alert(ogrdtxtbxCEQty);
alert(ogrdtxtbxCEUnitPrice);
alert(ogrdtxtbxCEVendor1Amt);
alert(
'hi');
//Here i want to calculate the values and update the responctive control.
// return false;
}
</script >
</telerik:RadCodeBlock>
<telerik:RadGrid ID="RadGrid1" Width="100%" GridLines="None" runat="server" AllowAutomaticUpdates="True" AutoGenerateColumns ="False">
<MasterTableView TableLayout="Fixed" DataKeyNames="ItemCode" EditMode ="InPlace">
<Columns >
<telerik:GridBoundColumn UniqueName="ItemCode" DataField="ItemCode" HeaderText="#" ReadOnly ="True"/>
<telerik:GridBoundColumn UniqueName="ItemName" DataField="ItemName" HeaderText="Line Item" ColumnEditorID="grdtxtbxCELineItem" />
<telerik:GridBoundColumn UniqueName="Type" DataField="Type" HeaderText="Type" ColumnEditorID="grdtxtbxCEType" />
<telerik:GridNumericColumn UniqueName="Qty" DataField="Qty" HeaderText="Qty" ColumnEditorID="grdtxtbxCEQty" />
<telerik:GridNumericColumn UniqueName="UnitPrice" DataField="UnitPrice" HeaderText="Unit Price" ColumnEditorID="grdtxtbxCEUnitPrice" />
<telerik:GridNumericColumn UniqueName="Vendor1Amt" DataField="Vendor1Amt" HeaderText="Vendor1Amt" ColumnEditorID="grdtxtbxCEVendor1Amt" />
<telerik:GridNumericColumn UniqueName="Vendor2Amt" DataField="Vendor2Amt" HeaderText="Vendor2Amt" ColumnEditorID="grdtxtbxCEVendor2Amt" />
<telerik:GridNumericColumn UniqueName="Vendor3Amt" DataField="Vendor3Amt" HeaderText="Vendor3Amt" ColumnEditorID="grdtxtbxCEVendor3Amt" />
<telerik:GridDropDownColumn UniqueName="AccountCode" DataField="AccountCode" HeaderText="AccountCode" ColumnEditorID="grdtxtbxCEAccountCode" ListTextField="" ListValueField=""/>
<telerik:GridDropDownColumn UniqueName="Age" DataField="Age" HeaderText="Age" ColumnEditorID="grdtxtbxCEAge" ListTextField="FormID" ListValueField="FormID" />
</Columns >
</MasterTableView>
<ClientSettings>
<ClientEvents OnRowClick="RowClick" OnRowDblClick="RowDblClick" OnGridCreated="GridCreated" OnCommand="GridCommand" />
</ClientSettings >
</telerik:RadGrid >
<telerik:GridTextBoxColumnEditor ID="grdtxtbxCELineItem" runat="server" />
<telerik:GridTextBoxColumnEditor ID="grdtxtbxCEType" runat="server" /> <telerik:GridNumericColumnEditor ID="grdtxtbxCEQty" runat="server" />
<telerik:GridNumericColumnEditor ID="grdtxtbxCEUnitPrice" runat="server" />
<telerik:GridNumericColumnEditor ID="grdtxtbxCEVendor1Amt" runat="server" NumericTextBox-ReadOnly="False"
<telerik:GridNumericColumnEditor ID="grdtxtbxCEVendor2Amt" runat="server" />
<telerik:GridNumericColumnEditor ID="grdtxtbxCEVendor3Amt" runat="server" />
<telerik:GridDropDownListColumnEditor ID="grdtxtbxCEAccountCode" runat="server" DataTextField="FullDescription" DataValueField="KeyCVal" />
<telerik:GridDropDownListColumnEditor ID="grdtxtbxCEAge" runat="server" DataTextField="FormID" DataValueField="FormID" />
ITEMDATABOUND EVENT:
Private
Sub RadGrid1_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound
If e.Item.IsInEditMode Then
Dim oeditModeRow As GridEditableItem
oeditModeRow =
CType(e.Item, GridEditableItem)
Dim oeditManager As GridEditManager
oeditManager = oeditModeRow.EditManager
Dim grdtxtbxCEAccountCode As GridDropDownColumnEditor = CType(oeditManager.GetColumnEditor("AccountCode"), GridDropDownColumnEditor)
Dim oDTAssetAge As DataTable = GetAssetForEditTemplate()
grdtxtbxCEAccountCode.DataSource = oDTAssetAge
grdtxtbxCEAccountCode.DataBind()
Dim grdtxtbxCEAge As GridDropDownColumnEditor = CType(oeditManager.GetColumnEditor("Age"), GridDropDownColumnEditor)
grdtxtbxCEAge.DataSource = GetAgeForEditTemplate()
grdtxtbxCEAge.DataBind()
Dim grdtxtbxCEQty As GridNumericColumnEditor = CType(oeditManager.GetColumnEditor("Qty"), GridNumericColumnEditor)
Dim grdtxtbxCEUnitPrice As GridNumericColumnEditor = CType(oeditManager.GetColumnEditor("UnitPrice"), GridNumericColumnEditor)
Dim grdtxtbxCEVendor1Amt As GridNumericColumnEditor = CType(oeditManager.GetColumnEditor("Vendor1Amt"), GridNumericColumnEditor)
grdtxtbxCEQty.NumericTextBox.ClientEvents.OnBlur =
"CalculateAmount('" & grdtxtbxCEQty.ClientID & "', '" & grdtxtbxCEUnitPrice.ClientID & "', '" & grdtxtbxCEVendor1Amt.ClientID & "')"
'AcountCode
End If
End Sub
Javascript function "CalculateAmount" i want the controls of edit controls.
Hope this help for your analysis.
Thanks in advance.
One option you can do is save the ClientID of NumericTextbox in HiddenField and access it from client side. Sample code is given below.
VB.NET:
Protected Sub RadGrid1_ItemCreated(sender As Object, e As GridItemEventArgs) If e.Item.IsInEditMode AndAlso TypeOf e.Item Is GridEditableItem Then Dim oeditModeRow As GridEditableItem = Nothing oeditModeRow = DirectCast(e.Item, GridEditableItem) Dim grdtxtbxCEQty As RadNumericTextBox = DirectCast(oeditModeRow("Qty").Controls(0), RadNumericTextBox) Dim grdtxtbxCEUnitPrice As RadNumericTextBox = DirectCast(oeditModeRow("UnitPrice").Controls(0), RadNumericTextBox) HiddenField1.Value = grdtxtbxCEQty.ClientID grdtxtbxCEQty.Attributes.Add("onblur", "CalculateAmount();") End IfEnd SubJava Script:
<script type="text/javascript"> function CalculateAmount() { var ogrdtxtbxCEQty = $find(document.getElementById('HiddenField1').value); alert(ogrdtxtbxCEQty.get_value()); } </script>Also refer the following code library which provides an example of how to retrieve editor values on client:
Retrieving grid editor value client side
Thanks,
Princy.