Hi, we have a RadGrid described below. The behavior it has now is that if you double click on a row it becomes editable, and if you move away from the row and single click anywhere on the grid the row is saved and the data on the grid is updated (reloaded). We would like to modify the behavior so that the user can still double click to move from row to row on the grid to edit the fields, but the save is done when the user clicks a "Save" button. The code is shown below:
The code behind is:
<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 RowDblClick(sender, eventArgs) { editedRow = eventArgs.get_itemIndexHierarchical(); $find("<%= RadGrid1.MasterTableView.ClientID %>").editItem(editedRow); } function GridCommand(sender, args) { if (args.get_commandName() != "Edit") { editedRow = null; } } function GridCreated(sender, eventArgs) { 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 i = 0; i < dropdowns.length;i++) { dropdowns[i].onchange = TrackChanges; } setTimeout(function(){if(elementsToUse[0])elementsToUse[0].focus();},100); } function TrackChanges(e) { hasChanges = true; } --> </script> </telerik:RadCodeBlock> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadGrid1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" /> <telerik:AjaxUpdatedControl ControlID="Label1" /> </UpdatedControls> </telerik:AjaxSetting> </telerik:RadAjaxManager> <telerik:RadGrid ID="RadGrid1" DataSourceID="SessionDataSource1" OnItemDataBound = "RadGrid1_ItemDataBound" Width="97%" ShowStatusBar="True" AllowSorting="True" PageSize="21" GridLines="None" AllowPaging="True" runat="server" AllowAutomaticUpdates="True" AutoGenerateColumns="False" > <MasterTableView TableLayout="Fixed" DataKeyNames="checklistNo" EditMode="InPlace" DataSourceID="SessionDataSource1"> <Columns> <telerik:GridBoundColumn UniqueName="CategoryID" DataField="CategoryID" HeaderText="CategoryID" Display="False" ReadOnly="True" > <HeaderStyle Width="10%" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn UniqueName="checklistNo" DataField="checklistNo" HeaderText="checklistNo" Display="False" ReadOnly="True" > <HeaderStyle Width="25%" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn UniqueName="Related_item_type_label" DataField="Related_item_type_label" HeaderText="Question" ReadOnly="True"> <HeaderStyle Width="30%" /> </telerik:GridBoundColumn> <telerik:GridTemplateColumn UniqueName="TemplateColumn"> <HeaderStyle Width="12%" /> <ItemStyle Width="12%" /> <HeaderTemplate> <asp:Label ID="lblHeaderServiceImpact" Text="Service Impact" runat="server"></asp:Label> </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblServiceImpact1" Text='<%#Eval("Service_impact_category")%>' runat="server"></asp:Label> </ItemTemplate> <EditItemTemplate> <telerik:RadTextBox AutoPostBack="true" ReadOnly="true" ID="lbllblServiceImpact" runat="server" Text='<%#Eval("Service_impact_category")%>' BorderStyle="None"> </telerik:RadTextBox> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn UniqueName="TemplateColumn1"> <HeaderStyle Width="16%" /> <ItemStyle Width="16%" /> <HeaderTemplate> <asp:Label ID="lblHeaderInspectionResult" Text="Inspection Result" runat="server"></asp:Label> </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblInspectionResult1" Text='<%#Eval("INSPECTION_RESULT")%>' runat="server"></asp:Label> </ItemTemplate> <EditItemTemplate> <telerik:RadTextBox AutoPostBack="true" visible="False" ID="lblInspectionResult" runat="server" Text='<%#Eval("INSPECTION_RESULT")%>'> </telerik:RadTextBox> <telerik:RadComboBox visible="True" ID="cbInspectionResult" AppendDataBoundItems="true" runat="server" Width="100px" > </telerik:RadComboBox> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn UniqueName="TemplateColumn2"> <HeaderStyle Width="16%" /> <ItemStyle Width="16%" /> <HeaderTemplate> <asp:Label ID="lblHeaderInspectionFault" Text="Inspection Fault" runat="server"></asp:Label> </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblInspectionFault1" Text='<%#Eval("INSPECTION_FAULT")%>' runat="server"></asp:Label> </ItemTemplate> <EditItemTemplate> <telerik:RadTextBox AutoPostBack="true" visible="False" ID="lblInspectionFault" runat="server" Text='<%#Eval("INSPECTION_FaULT")%>'> </telerik:RadTextBox> <telerik:RadComboBox visible="True" ID="cbInspectionFault" AppendDataBoundItems="true" runat="server" Width="100px" > </telerik:RadComboBox> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn UniqueName="TemplateColumn3"> <HeaderStyle Width="20%" /> <ItemStyle Width="20%" /> <HeaderTemplate> <asp:Label ID="lblInspectionCommentHeader" Text="Comments" runat="server"></asp:Label> </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblInspectionComment" Text='<%#Eval("INSPECTION_COMMENT")%>' runat="server"></asp:Label> </ItemTemplate> <EditItemTemplate> <telerik:RadTextBox AutoPostBack="true" visible="True" TextMode="MultiLine" Rows="2" ID="txtInspectionComment" runat="server" Text='<%#Eval("INSPECTION_COMMENT ")%>'> </telerik:RadTextBox> </EditItemTemplate> </telerik:GridTemplateColumn> </Columns> </MasterTableView> <ClientSettings> <ClientEvents OnRowClick="RowClick" OnRowDblClick="RowDblClick" OnGridCreated="GridCreated" OnCommand="GridCommand" /> </ClientSettings> </telerik:RadGrid> </asp:Panel> </td> </tr> </table> <telerik:GridTextBoxColumnEditor ID="GridTextBoxColumnEditor1" runat="server" TextBoxStyle-Width="180px" /> <telerik:GridDropDownListColumnEditor ID="GridDropDownListColumnEditor1" runat="server" DropDownStyle-Width="70px" /> <telerik:GridCheckBoxColumnEditor ID="GridCheckBoxColumnEditor1" runat="server" CheckBoxStyle-BorderWidth="2" /> <telerik:GridNumericColumnEditor ID="GridNumericColumnEditor1" runat="server" NumericTextBox-Width="50px" /> <br /> <asp:Label ID="Label1" runat="server" EnableViewState="false" /> <br /> <asp:SqlDataSource ID="SessionDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:OracleConnectionString %>" ProviderName="<%$ ConnectionStrings:OracleConnectionString.ProviderName %>" SelectCommand="SELECT categoryid, category_name, checklistNo, ROWNUM || ') ' || related_item_type_label AS related_item_type_label, inspection_Result, inspection_fault, service_impact_category, inspection_comment FROM ( SELECT categoryid || ' - ' || category_name categoryid, category_name, checklistNo, MAX( related_item_type_label ) AS related_item_type_label, MAX( inspection_Result ) AS inspection_Result,MAX( inspection_fault ) AS inspection_fault, MAX( service_impact_category ) AS service_impact_category, MAX( inspection_comment ) AS inspection_comment FROM(SELECT categoryid,category_name,checklistNo,DECODE( INSTR( related_item_type,'INSPECTION_RESULT'),0,NULL, related_item_type_label ) related_item_type_label,DECODE( INSTR( related_item_type,'INSPECTION_RESULT'),0,NULL, DECODE( related_item_value, NULL, default_value, related_item_value ) ) inspection_Result,DECODE( INSTR( related_item_type,'INSPECTION_FAULT'),0,NULL, DECODE( related_item_value, NULL, default_value, related_item_value ) ) inspection_fault,DECODE( INSTR( related_item_type,'SERVICE_IMPACT_CATEGORY'),0,NULL, DECODE( related_item_value, NULL, default_value, related_item_value ) ) service_impact_category,DECODE( INSTR( related_item_type,'INSPECTION_COMMENT'),0,NULL, DECODE( related_item_value, NULL, default_value, related_item_value ) ) inspection_comment FROM( SELECT v.view_name,v.item_type_order,v.related_item_type_label,v.related_item_type,SUBSTR(v.related_item_type, -5) checklistNo,d.related_item_value,( SELECT valid_type_rule_value FROM pimmds.valid_type_rules r WHERE r.valid_type_rule = 'VALID VALUE DEFAULT' AND r.item_type = v.related_item_type AND SYSDATE BETWEEN r.effectivity_in AND r.effectivity_out ) default_value, d.created_by, DECODE( c.categoryid,NULL,'91',c.categoryid) AS categoryid,c.category_name FROM PIMMDS.relationship_views v,( SELECT a.item_type, a.item_value, b.item_type related_item_type, b.item_value related_item_value, c.created_by FROM pimods.items a, pimods.items b, pimods.relationships c WHERE a.item_no = c.parent_item_no AND b.item_no = c.child_item_no AND a.item_type = 'INSPECTION_SEQUENCE_NUMBER' AND a.item_value = :ISN AND SYSDATE BETWEEN c.effectivity_in AND c.effectivity_out) d,(SELECT SUBSTR(related_item_type,-2) categoryid, related_item_type_value category_name FROM pimmds.relationship_views v WHERE view_name = 'Clearwire Quality Control Checklist' AND related_item_type LIKE 'INSPECTION_CATEGORY%' AND SYSDATE BETWEEN v.effectivity_in AND v.effectivity_out ) c WHERE v.view_name = 'Clearwire Quality Control Checklist Update' AND ( v.related_item_type LIKE 'INSPECTION_RESULT%' OR v.related_item_type LIKE 'INSPECTION_FAULT%' OR v.related_item_type LIKE 'SERVICE_IMPACT_CATEGORY%' OR v.related_item_type LIKE 'INSPECTION_COMMENT%') AND substr(v.related_item_type,-5,2) = :CATEGORYID AND v.item_type = d.item_type (+) AND v.related_item_type = d.related_item_type (+) AND SUBSTR( v.related_item_type,-5,2) = c.categoryid (+) ) ) GROUP BY categoryid, category_name,checklistNo ORDER BY checklistNo )" UpdateCommand="PIMMDS.QC_PROCESS_DATA_FLOW.deltaRDSInspection" OldValuesParameterFormatString="original_{0}" ConflictDetection="CompareAllValues" UpdateCommandType="StoredProcedure"> <UpdateParameters> <asp:Parameter Name="L_INSPECTION_SN" Type="String" /> <asp:Parameter Name="L_LINE" Type="String" /> <asp:Parameter Name="L_RESULTS" Type="String" /> <asp:Parameter Name="L_FAULTS" Type="String" /> <asp:Parameter Name="L_COMMENTS" Type="String" /> </UpdateParameters> <SelectParameters> <asp:Parameter Name="ISN" Type="String" Direction="Input" /> <asp:Parameter Name="CATEGORYID" Type="String" Direction="Input" /> </SelectParameters> </asp:SqlDataSource> The code behind is:
Protected Sub RadGrid1_UpdateCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles RadGrid1.UpdateCommand If TypeOf e.Item Is Telerik.Web.UI.GridEditableItem Then Dim MyItem As GridDataItem = CType(e.Item, GridDataItem) Dim newValues As Hashtable = New Hashtable e.Item.OwnerTableView.ExtractValuesFromItem(newValues, MyItem) Dim lineNumber As String = MyItem.KeyValues Else Throw New ApplicationException("Expecting GridEditFormItem type on UpdateCommand") End If End Sub Protected Sub RadGrid1_ItemUpdated(ByVal source As Object, ByVal e As GridUpdatedEventArgs) Handles RadGrid1.ItemUpdated Try Dim l_userName As String = bpimData.getUserName Dim item As GridEditableItem = e.Item Dim ltInspectionResult As RadComboBox = item.FindControl("cbInspectionResult") Dim ltInspectionFault As RadComboBox = item.FindControl("cbInspectionFault") Dim ltInspectionComment As RadTextBox = item.FindControl("txtInspectionComment") Dim MyItem As GridDataItem = CType(e.Item, GridDataItem) Dim newValues As Hashtable = New Hashtable e.Item.OwnerTableView.ExtractValuesFromItem(newValues, MyItem) Dim lineNumber As String = MyItem.KeyValues Dim results As String = ltInspectionResult.Text Dim faults As String = ltInspectionFault.Text Dim comments As String = ltInspectionComment.Text bpimData.ConnectionString = System.Configuration.ConfigurationManager.AppSettings("ConnectionString") Dim inspectionSN As String = Session("ID") Dim lineNo As String = lineNumber.Substring(14, 5) Dim spUpdate As String = "Begin PIMMDS.QC_PROCESS_DATA_FLOW.gridSaveInspection('" + inspectionSN + "','" + lineNo + "','" + results + "','" + faults + "','" + comments + "','" + l_userName + "') ; end;" bpimData.execute_dml(spUpdate) Catch ex As Exception End Try If Not e.Exception Is Nothing Then e.KeepInEditMode = True e.ExceptionHandled = True 'SetMessage(Server.HtmlEncode("Unable to update. Reason: " + e.Exception.Message).Replace("'", "'").Replace(vbCrLf, "<br />")) Else Dim dataItem As GridDataItem = e.Item 'SetMessage("ProductID " & dataItem.GetDataKeyValue("ProductID") & " updated") End If End Sub Protected Sub RadGrid1_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) If (TypeOf e.Item Is GridEditableItem AndAlso e.Item.IsInEditMode) Then Dim item As GridEditableItem = e.Item ' -------------------------------------------------------------------------- ' Update ComboBox for Inspection Result Dim lblserviceImpact As RadTextBox = item.FindControl("lbllblServiceImpact") Dim ltInspectionResult As RadTextBox = item.FindControl("lblInspectionResult") Dim irRadComboBox As RadComboBox = item.FindControl("cbInspectionResult") Dim inspectionResult As String If Not IsNothing(ltInspectionResult) Then If Not IsDBNull(ltInspectionResult.Text) Then inspectionResult = ltInspectionResult.Text Else inspectionResult = "N/A" End If If lblserviceImpact.Text = "Major" Then irRadComboBox.DataSource = Session("dtInspectionResultMajor") Else irRadComboBox.DataSource = Session("dtInspectionResultMinor") End If irRadComboBox.DataTextField = "INSPECTION_RESULT" irRadComboBox.DataValueField = "INSPECTION_RESULT" irRadComboBox.DataBind() If inspectionResult = "Pass" Then irRadComboBox.Items.Insert(0, New RadComboBoxItem("Pass")) Else irRadComboBox.Items.Insert(0, New RadComboBoxItem("Corrected")) End If irRadComboBox.SelectedValue = inspectionResult End If ' -------------------------------------------------------------------------- 'access/modify the edit item template settings here ' -------------------------------------------------------------------------- ' Update ComboBox for Inspection Fault Dim ltInspectionFault As RadTextBox = item.FindControl("lblInspectionFault") Dim ifRadComboBox As RadComboBox = item.FindControl("cbInspectionFault") Dim inspectionFault As String If Not IsNothing(ltInspectionFault) Then If Not IsDBNull(ltInspectionFault.Text) Then inspectionFault = ltInspectionFault.Text Else inspectionFault = "N/A" End If ifRadComboBox.DataSource = Session("dtInspectionFault") ifRadComboBox.DataTextField = "INSPECTION_FAULT" ifRadComboBox.DataValueField = "INSPECTION_FAULT" ifRadComboBox.DataBind() ifRadComboBox.SelectedValue = inspectionFault End If ElseIf (TypeOf e.Item Is GridDataItem AndAlso Not e.Item.IsInEditMode AndAlso Page.IsPostBack) Then Dim item As GridDataItem = e.Item 'Dim label As Label = Me.FindControl("Label1") ''update the label value 'label.Text = Session("updatedValue") End If End Sub Private Sub ApplyTemplate(ByVal parent As String, ByVal template As String) Dim parentItem As RadMenuItem = RadMenu1.FindItemByText(parent) Dim _template As ITemplate = LoadTemplate(template) For Each item As RadMenuItem In parentItem.Items _template.InstantiateIn(item) item.DataBind() Next End Sub Private Sub selectedItem() Dim ChildItem As New RadMenuItem() Dim a As String a = "re" End Sub