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
>