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