Hi Telerik Team (or anyone else who can help),
I have spent all day searching to the ends of the internet to try to find out how to save all the data from a RadGrid at once. I have found many other people who want to do this, but cannot find a good answer as to how! I also have another post about this topic but no one has replied........... can it be done!
It is easy to populate the whole grid at one time, but as I have read many times about all the Automatic Grid Saving Stuff there is no mention of how to save the whole grid at one time. Our users want us to present them with a grid to fill in, then after they look at the whole thing and make sure they have everything correct - then they want us to save it. They don't want us to save one row at a time. Our upper management can't believe that there isn't a simple way to do this and right now they aren't thinking very highly of the Telerik package they bought us!
We have a grid represented in the code below, and it loads great, and works great if you click on a row, edit it, then click on another row and it saves, but they don't want that. i was able to put a few lines of code in the page load that will make the whole grid editable, but then how do we save it?
Is there a nice way I can use the Telerik RadGrid auto save stuff to save each row - maybe a loop to access each row then do something? If I could have a save button then if that button is pressed execute a loop to access each row and call the UpdateCommand for each that would work but we can't quite figure out how to do it.
Here is my grid code, please let me know if you would like me to provide anything else:
Also - if there is a better way to do it, something else besides a grid to display data, edit then save it please let me know.
I have spent all day searching to the ends of the internet to try to find out how to save all the data from a RadGrid at once. I have found many other people who want to do this, but cannot find a good answer as to how! I also have another post about this topic but no one has replied........... can it be done!
It is easy to populate the whole grid at one time, but as I have read many times about all the Automatic Grid Saving Stuff there is no mention of how to save the whole grid at one time. Our users want us to present them with a grid to fill in, then after they look at the whole thing and make sure they have everything correct - then they want us to save it. They don't want us to save one row at a time. Our upper management can't believe that there isn't a simple way to do this and right now they aren't thinking very highly of the Telerik package they bought us!
We have a grid represented in the code below, and it loads great, and works great if you click on a row, edit it, then click on another row and it saves, but they don't want that. i was able to put a few lines of code in the page load that will make the whole grid editable, but then how do we save it?
Is there a nice way I can use the Telerik RadGrid auto save stuff to save each row - maybe a loop to access each row then do something? If I could have a save button then if that button is pressed execute a loop to access each row and call the UpdateCommand for each that would work but we can't quite figure out how to do it.
Here is my grid code, please let me know if you would like me to provide anything else:
Also - if there is a better way to do it, something else besides a grid to display data, edit then save it please let me know.
<body class="BODY"> <form runat="server" id="mainForm" method="post" style="width: 100%;"> <%--<telerik:Header runat="server" ID="Header1" NavigationLanguage="VB"></telerik:Header>--%> <!-- content start --> <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 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> </AjaxSettings> </telerik:RadAjaxManager> <telerik:RadGrid ID="RadGrid1" DataSourceID="SessionDataSource1" OnItemDataBound = "RadGrid1_ItemDataBound" Width="97%" ShowStatusBar="True" AllowSorting="True" PageSize="15" GridLines="None" AllowPaging="True" runat="server" AllowAutomaticUpdates="True" AutoGenerateColumns="False"> <MasterTableView TableLayout="Fixed" DataKeyNames="checklistNo" EditMode="InPlace" > <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> <HeaderStyle Width="10%" /> <ItemStyle Width="10%" /> <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> <HeaderStyle Width="17%" /> <ItemStyle Width="17%" /> <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" > </telerik:RadComboBox> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn> <HeaderStyle Width="17%" /> <ItemStyle Width="17%" /> <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" > </telerik:RadComboBox> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn> <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 Width="100%" AutoPostBack="true" visible="True" 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> <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> <!-- content end --> <%--<telerik:Footer runat="server" ID="Footer1"></telerik:Footer>--%> <table> <tr> <td> </td><td> </td><td> </td> <td> </td> <td align="center" > <asp:Button ID="btnsave" runat="server" OnClick="btnsave_click" Font-Size="Small" causesvalidation="false" Text="Save Data" /> </td> </tr> </table> </form> </body>