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

How to save from RadGrid only when user clicks on save button

6 Answers 391 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Judith Murgia
Top achievements
Rank 1
Judith Murgia asked on 17 Aug 2010, 03:14 PM
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:

        <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

6 Answers, 1 is accepted

Sort by
0
Judith Murgia
Top achievements
Rank 1
answered on 17 Aug 2010, 11:00 PM
I was able to modify the grid above so that the whole grid is in edit mode by putting the lines below in the Page Load, but how do I save all the data?

Dim i As Integer
For i = 0 To RadGrid1.PageSize - 1
    RadGrid1.EditIndexes.Add(i)
Next i

0
Judith Murgia
Top achievements
Rank 1
answered on 17 Aug 2010, 11:00 PM
I was able to modify the grid above so that the whole grid is in edit mode by putting the lines below in the Page Load, but how do I save all the data?

Dim i As Integer
For i = 0 To RadGrid1.PageSize - 1
    RadGrid1.EditIndexes.Add(i)
Next i

0
Iana Tsolova
Telerik team
answered on 20 Aug 2010, 08:38 AM
Hello Judith,

Check out this help article for more information on how you can perform batch updates with RadGrid.

Kind regards,
Iana
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Srinivasaragavan
Top achievements
Rank 1
answered on 20 Nov 2012, 01:28 PM
Im looking for the same information. The link been attached here is not available now. Could you please provide the proper link
0
Shinu
Top achievements
Rank 2
answered on 21 Nov 2012, 03:50 AM
Hi Srinivasaragavan,

Please check the following help documentation.
Performing Batch Updates

Thanks,
Shinu.
0
Srinivasaragavan
Top achievements
Rank 1
answered on 27 Nov 2012, 01:17 PM
Thanks for the information.
It worked for me.
Tags
Grid
Asked by
Judith Murgia
Top achievements
Rank 1
Answers by
Judith Murgia
Top achievements
Rank 1
Iana Tsolova
Telerik team
Srinivasaragavan
Top achievements
Rank 1
Shinu
Top achievements
Rank 2
Share this question
or