Hello,
I'm using a RadGrid bound to an ASP.Net ObjectDataSource.
I want it to put all its rows in Edit Mode by clicking on a command button.
When the user has entered all values, he has to click on another command button to save the data.
In the code behind, I want each edited item to call the Update method defined in the ObjectDataSource.
But I get a GridException :
"Only items with IsInEditMode set to true can be updated"
I don't know why.
Here is the ASPX code for the DataSource + RadGrid:
And the code behind:
Any help would be appreciated !
Thanks
Vince
I'm using a RadGrid bound to an ASP.Net ObjectDataSource.
I want it to put all its rows in Edit Mode by clicking on a command button.
When the user has entered all values, he has to click on another command button to save the data.
In the code behind, I want each edited item to call the Update method defined in the ObjectDataSource.
But I get a GridException :
"Only items with IsInEditMode set to true can be updated"
I don't know why.
Here is the ASPX code for the DataSource + RadGrid:
<
asp:ObjectDataSource
runat
=
"server"
ID
=
"ODS_FaceShoulderLength"
SelectMethod
=
"GetFaceShoulderLengthsForOneValue"
TypeName
=
"VAMTestsDB.TestsManagement.MachiningInfoManager"
>
</
asp:ObjectDataSource
>
<
asp:ObjectDataSource
runat
=
"server"
ID
=
"ODS_Values"
onselecting
=
"ODS_Values_Selecting"
SelectMethod
=
"GetMachiningInfoValues"
TypeName
=
"VAMTestsDB.TestsManagement.MachiningInfoManager"
OldValuesParameterFormatString
=
"{0}"
UpdateMethod
=
"UpdateMachiningInfoValues"
>
<
UpdateParameters
>
<
asp:Parameter
Name
=
"PTPId"
Type
=
"Int32"
/>
<
asp:Parameter
Name
=
"SpecimenId"
Type
=
"Int32"
/>
<
asp:Parameter
Name
=
"ThreadInterference1ValuePer100"
Type
=
"Decimal"
/>
<
asp:Parameter
Name
=
"SealInterference1ValuePer100"
Type
=
"Decimal"
/>
<
asp:Parameter
Name
=
"PinTaper1ValuePer100"
Type
=
"Decimal"
/>
<
asp:Parameter
Name
=
"BoxTaper1ValuePer100"
Type
=
"Decimal"
/>
<
asp:Parameter
Name
=
"ThreadInterference2ValuePer100"
Type
=
"Decimal"
/>
<
asp:Parameter
Name
=
"SealInterference2ValuePer100"
Type
=
"Decimal"
/>
<
asp:Parameter
Name
=
"PinTaper2ValuePer100"
Type
=
"Decimal"
/>
<
asp:Parameter
Name
=
"BoxTaper2ValuePer100"
Type
=
"Decimal"
/>
<
asp:Parameter
Name
=
"D1"
Type
=
"String"
/>
<
asp:Parameter
Name
=
"D2"
Type
=
"String"
/>
<
asp:Parameter
Name
=
"ThreadAxialGap"
Type
=
"String"
/>
<
asp:Parameter
Name
=
"W"
Type
=
"String"
/>
<
asp:Parameter
Name
=
"FaceShoulderLengthId"
Type
=
"Int32"
/>
<
asp:Parameter
DbType
=
"Guid"
Name
=
"UserId"
/>
</
UpdateParameters
>
<
SelectParameters
>
<
asp:Parameter
Name
=
"keys"
Type
=
"Object"
/>
</
SelectParameters
>
</
asp:ObjectDataSource
>
<
telerik:RadGrid
runat
=
"server"
ID
=
"RG_Values"
DataSourceID
=
"ODS_Values"
AllowAutomaticUpdates
=
"true"
GridLines
=
"None"
AllowMultiRowEdit
=
"true"
AutoGenerateColumns
=
"False"
onitemcreated
=
"RG_Values_ItemCreated"
onitemcommand
=
"RG_Values_ItemCommand"
onprerender
=
"RG_Values_PreRender"
>
<
MasterTableView
DataSourceID
=
"ODS_Values"
EditMode
=
"EditForms"
DataKeyNames
=
"PTPId,SpecimenId"
CommandItemDisplay
=
"TopAndBottom"
>
<
EditFormSettings
EditFormType
=
"Template"
>
<
FormTemplate
>
<
tr
>
<
td
colspan
=
"5"
> </
td
>
<
td
>
<
telerik:RadNumericTextBox
runat
=
"server"
AllowOutOfRangeAutoCorrect
=
"true"
ButtonsPosition
=
"Right"
DataType
=
"System.Decimal"
ID
=
"NTB_TI1"
MinValue
=
"-50"
MaxValue
=
"150"
ShowSpinButtons
=
"true"
Type
=
"Number"
DbValue='<%#Bind("ThreadInterference1ValuePer100") %>'>
<
IncrementSettings
InterceptArrowKeys
=
"true"
InterceptMouseWheel
=
"true"
Step
=
"0.1"
/>
<
NumberFormat
AllowRounding
=
"true"
DecimalDigits
=
"1"
DecimalSeparator
=
"."
/>
<
ClientEvents
OnKeyPress
=
"onNumericKeyPress"
/>
</
telerik:RadNumericTextBox
>
</
td
>
<
td
>
<
telerik:RadNumericTextBox
runat
=
"server"
AllowOutOfRangeAutoCorrect
=
"true"
ButtonsPosition
=
"Right"
DataType
=
"System.Decimal"
ID
=
"NTB_SI1"
MinValue
=
"-50"
MaxValue
=
"150"
ShowSpinButtons
=
"true"
Type
=
"Number"
DbValue='<%#Bind("SealInterference1ValuePer100") %>'>
<
IncrementSettings
InterceptArrowKeys
=
"true"
InterceptMouseWheel
=
"true"
Step
=
"0.1"
/>
<
NumberFormat
AllowRounding
=
"true"
DecimalDigits
=
"1"
DecimalSeparator
=
"."
/>
<
ClientEvents
OnKeyPress
=
"onNumericKeyPress"
/>
</
telerik:RadNumericTextBox
>
</
td
>
<
td
colspan
=
"3"
> </
td
>
<
td
>
<
telerik:RadNumericTextBox
runat
=
"server"
AllowOutOfRangeAutoCorrect
=
"true"
ButtonsPosition
=
"Right"
DataType
=
"System.Decimal"
ID
=
"NTB_PT1"
MinValue
=
"0"
MaxValue
=
"100"
ShowSpinButtons
=
"true"
Type
=
"Number"
DbValue='<%#Bind("PinTaper1ValuePer100") %>'>
<
IncrementSettings
InterceptArrowKeys
=
"true"
InterceptMouseWheel
=
"true"
Step
=
"0.01"
/>
<
NumberFormat
AllowRounding
=
"true"
DecimalDigits
=
"2"
DecimalSeparator
=
"."
/>
<
ClientEvents
OnKeyPress
=
"onNumericKeyPress"
/>
</
telerik:RadNumericTextBox
>
</
td
>
<
td
>
<
telerik:RadNumericTextBox
runat
=
"server"
AllowOutOfRangeAutoCorrect
=
"true"
ButtonsPosition
=
"Right"
DataType
=
"System.Decimal"
ID
=
"NTB_BT1"
MinValue
=
"0"
MaxValue
=
"100"
ShowSpinButtons
=
"true"
Type
=
"Number"
DbValue='<%#Bind("BoxTaper1ValuePer100") %>'>
<
IncrementSettings
InterceptArrowKeys
=
"true"
InterceptMouseWheel
=
"true"
Step
=
"0.01"
/>
<
NumberFormat
AllowRounding
=
"true"
DecimalDigits
=
"2"
DecimalSeparator
=
"."
/>
<
ClientEvents
OnKeyPress
=
"onNumericKeyPress"
/>
</
telerik:RadNumericTextBox
>
</
td
>
<
td
colspan
=
"2"
> </
td
>
<
td
>
<
telerik:RadNumericTextBox
runat
=
"server"
AllowOutOfRangeAutoCorrect
=
"true"
ButtonsPosition
=
"Right"
DataType
=
"System.Decimal"
ID
=
"NTB_TI2"
MinValue
=
"-50"
MaxValue
=
"150"
ShowSpinButtons
=
"true"
Type
=
"Number"
DbValue='<%#Bind("ThreadInterference2ValuePer100") %>'>
<
IncrementSettings
InterceptArrowKeys
=
"true"
InterceptMouseWheel
=
"true"
Step
=
"0.1"
/>
<
NumberFormat
AllowRounding
=
"true"
DecimalDigits
=
"1"
DecimalSeparator
=
"."
/>
<
ClientEvents
OnKeyPress
=
"onNumericKeyPress"
/>
</
telerik:RadNumericTextBox
>
</
td
>
<
td
>
<
telerik:RadNumericTextBox
runat
=
"server"
AllowOutOfRangeAutoCorrect
=
"true"
ButtonsPosition
=
"Right"
DataType
=
"System.Decimal"
ID
=
"NTB_SI2"
MinValue
=
"-50"
MaxValue
=
"150"
ShowSpinButtons
=
"true"
Type
=
"Number"
DbValue='<%#Bind("SealInterference2ValuePer100") %>'>
<
IncrementSettings
InterceptArrowKeys
=
"true"
InterceptMouseWheel
=
"true"
Step
=
"0.1"
/>
<
NumberFormat
AllowRounding
=
"true"
DecimalDigits
=
"1"
DecimalSeparator
=
"."
/>
<
ClientEvents
OnKeyPress
=
"onNumericKeyPress"
/>
</
telerik:RadNumericTextBox
>
</
td
>
<
td
colspan
=
"3"
> </
td
>
<
td
>
<
telerik:RadNumericTextBox
runat
=
"server"
AllowOutOfRangeAutoCorrect
=
"true"
ButtonsPosition
=
"Right"
DataType
=
"System.Decimal"
ID
=
"NTB_PT2"
MinValue
=
"0"
MaxValue
=
"100"
ShowSpinButtons
=
"true"
Type
=
"Number"
DbValue='<%#Bind("PinTaper2ValuePer100") %>'>
<
IncrementSettings
InterceptArrowKeys
=
"true"
InterceptMouseWheel
=
"true"
Step
=
"0.01"
/>
<
NumberFormat
AllowRounding
=
"true"
DecimalDigits
=
"2"
DecimalSeparator
=
"."
/>
<
ClientEvents
OnKeyPress
=
"onNumericKeyPress"
/>
</
telerik:RadNumericTextBox
>
</
td
>
<
td
>
<
telerik:RadNumericTextBox
runat
=
"server"
AllowOutOfRangeAutoCorrect
=
"true"
ButtonsPosition
=
"Right"
DataType
=
"System.Decimal"
ID
=
"NTB_BT2"
MinValue
=
"0"
MaxValue
=
"100"
ShowSpinButtons
=
"true"
Type
=
"Number"
DbValue='<%#Bind("BoxTaper2ValuePer100") %>'>
<
IncrementSettings
InterceptArrowKeys
=
"true"
InterceptMouseWheel
=
"true"
Step
=
"0.01"
/>
<
NumberFormat
AllowRounding
=
"true"
DecimalDigits
=
"2"
DecimalSeparator
=
"."
/>
<
ClientEvents
OnKeyPress
=
"onNumericKeyPress"
/>
</
telerik:RadNumericTextBox
>
</
td
>
<
td
>
<
asp:TextBox
runat
=
"server"
ID
=
"TB_D1"
TextMode
=
"MultiLine"
Rows
=
"5"
cols
=
"20"
Text='<%#Bind("D1") %>' />
</
td
>
<
td
>
<
asp:TextBox
runat
=
"server"
ID
=
"TB_D2"
TextMode
=
"MultiLine"
Rows
=
"5"
cols
=
"20"
Text='<%#Bind("D2") %>' />
</
td
>
<
td
>
<
asp:TextBox
runat
=
"server"
ID
=
"TB_TAG"
TextMode
=
"MultiLine"
Rows
=
"5"
cols
=
"20"
Text='<%#Bind("ThreadAxialGap") %>' />
</
td
>
<
td
>
<
asp:TextBox
runat
=
"server"
ID
=
"TB_W"
TextMode
=
"MultiLine"
Rows
=
"5"
cols
=
"20"
Text='<%#Bind("W") %>' />
</
td
>
<
td
>
<
asp:DropDownList
ID
=
"DDL_FaceShoulderLength"
runat
=
"server"
DataSourceID
=
"ODS_FaceShoulderLength"
DataTextField
=
"Name"
DataValueField
=
"Id"
SelectedValue='<%# Bind("FaceShoulderLengthId") %>'>
</
asp:DropDownList
>
</
td
>
</
tr
>
</
FormTemplate
>
</
EditFormSettings
>
<
RowIndicatorColumn
>
<
HeaderStyle
Width
=
"20px"
/>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
>
<
HeaderStyle
Width
=
"20px"
/>
</
ExpandCollapseColumn
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"PTPReference"
HeaderText
=
"PTP"
ReadOnly
=
"true"
SortExpression
=
"PTPReference"
UniqueName
=
"PTPReference"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"PinName"
HeaderText
=
"Pin"
ReadOnly
=
"true"
SortExpression
=
"PinName"
UniqueName
=
"PinName"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"BoxName"
HeaderText
=
"Box"
ReadOnly
=
"true"
SortExpression
=
"BoxName"
UniqueName
=
"BoxName"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ThreadInterference1Type"
HeaderText
=
"TI1"
HeaderTooltip
=
"Thread Interference 1"
ReadOnly
=
"true"
SortExpression
=
"ThreadInterference1Type"
UniqueName
=
"ThreadInterference1Type"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"SealInterference1Type"
HeaderText
=
"SI1"
HeaderTooltip
=
"Seal Interference 1"
ReadOnly
=
"true"
SortExpression
=
"SealInterference1Type"
UniqueName
=
"SealInterference1Type"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ThreadInterference1Value"
DataType
=
"System.Decimal"
HeaderText
=
"TI1 Value"
HeaderTooltip
=
"Thread Interference 1 Value"
DataFormatString
=
"{0:###.#%}"
SortExpression
=
"ThreadInterference1Value"
UniqueName
=
"ThreadInterference1Value"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"SealInterference1Value"
DataFormatString
=
"{0:###.#%}"
DataType
=
"System.Decimal"
HeaderText
=
"SI1 Value"
HeaderTooltip
=
"Seal Interference 1 Value"
SortExpression
=
"SealInterference1Value"
UniqueName
=
"SealInterference1Value"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"PinTaper1Type"
HeaderText
=
"PT1"
HeaderTooltip
=
"Pin Taper 1"
ReadOnly
=
"true"
SortExpression
=
"PinTaper1Type"
UniqueName
=
"PinTaper1Type"
>
</
telerik:GridBoundColumn
>
<
telerik:GridCheckBoxColumn
DataField
=
"PinDoubleThreadTaper1"
DataType
=
"System.Boolean"
HeaderText
=
"PDTT 1 ?"
HeaderTooltip
=
"Pin Double Thread Taper 1 ?"
ReadOnly
=
"true"
SortExpression
=
"PinDoubleThreadTaper1"
UniqueName
=
"PinDoubleThreadTaper1"
>
</
telerik:GridCheckBoxColumn
>
<
telerik:GridBoundColumn
DataField
=
"BoxTaper1Type"
HeaderText
=
"BT1"
HeaderTooltip
=
"Box Taper 1"
ReadOnly
=
"true"
SortExpression
=
"BoxTaper1Type"
UniqueName
=
"BoxTaper1Type"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"PinTaper1Value"
DataType
=
"System.Decimal"
DataFormatString
=
"{0:###.##%}"
HeaderText
=
"PT1 Value"
HeaderTooltip
=
"Pin Taper 1 Value"
SortExpression
=
"PinTaper1Value"
UniqueName
=
"PinTaper1Value"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"BoxTaper1Value"
DataType
=
"System.Decimal"
DataFormatString
=
"{0:###.##%}"
HeaderText
=
"BT1 Value"
HeaderTooltip
=
"Box Taper 1 Value"
SortExpression
=
"BoxTaper1Value"
UniqueName
=
"BoxTaper1Value"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ThreadInterference2Type"
HeaderText
=
"TI2"
HeaderTooltip
=
"Thread Interference 2"
ReadOnly
=
"true"
SortExpression
=
"ThreadInterference2Type"
UniqueName
=
"ThreadInterference2Type"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"SealInterference2Type"
HeaderText
=
"SI2"
HeaderTooltip
=
"Seal Interference 2"
ReadOnly
=
"true"
SortExpression
=
"SealInterference2Type"
UniqueName
=
"SealInterference2Type"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ThreadInterference2Value"
DataFormatString
=
"{0:###.#%}"
DataType
=
"System.Decimal"
HeaderText
=
"TI2 Value"
HeaderTooltip
=
"Thread Interference 2 Value"
SortExpression
=
"ThreadInterference2Value"
UniqueName
=
"ThreadInterference2Value"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"SealInterference2Value"
DataFormatString
=
"{0:###.#%}"
DataType
=
"System.Decimal"
HeaderText
=
"SI2 Value"
HeaderTooltip
=
"Seal Interference 2 Value"
SortExpression
=
"SealInterference2Value"
UniqueName
=
"SealInterference2Value"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"PinTaper2Type"
HeaderText
=
"PT2"
HeaderTooltip
=
"Pin Taper 2"
ReadOnly
=
"true"
SortExpression
=
"PinTaper2Type"
UniqueName
=
"PinTaper2Type"
>
</
telerik:GridBoundColumn
>
<
telerik:GridCheckBoxColumn
DataField
=
"PinDoubleThreadTaper2"
DataType
=
"System.Boolean"
HeaderText
=
"PDTT 2 ?"
HeaderTooltip
=
"Pin Double Thread Taper 2 ?"
ReadOnly
=
"true"
SortExpression
=
"PinDoubleThreadTaper2"
UniqueName
=
"PinDoubleThreadTaper2"
>
</
telerik:GridCheckBoxColumn
>
<
telerik:GridBoundColumn
DataField
=
"BoxTaper2Type"
HeaderText
=
"BT2"
HeaderTooltip
=
"Box Taper 2"
ReadOnly
=
"true"
SortExpression
=
"BoxTaper2Type"
UniqueName
=
"BoxTaper2Type"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"PinTaper2Value"
DataType
=
"System.Decimal"
DataFormatString
=
"{0:###.##%}"
HeaderText
=
"PT2 Value"
HeaderTooltip
=
"Pin Taper 2 Value"
SortExpression
=
"PinTaper2Value"
UniqueName
=
"PinTaper2Value"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"BoxTaper2Value"
DataType
=
"System.Decimal"
DataFormatString
=
"{0:###.##%}"
HeaderText
=
"BT2 Value"
HeaderTooltip
=
"Box Taper 2 Value"
SortExpression
=
"BoxTaper2Value"
UniqueName
=
"BoxTaper2Value"
>
</
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"D1"
UniqueName
=
"D1"
>
<
ItemTemplate
>
<
div
class
=
"autocut"
title='<%#Eval("D1") %>'><%#Eval("D1") %></
div
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"D2"
UniqueName
=
"D2"
ItemStyle-Width
=
"50px"
>
<
ItemTemplate
>
<
div
class
=
"autocut"
title='<%#Eval("D2") %>'><%#Eval("D2")%></
div
>
</
ItemTemplate
>
<
ItemStyle
Width
=
"50px"
/>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
DataField
=
"ThreadAxialGap"
DataType
=
"System.String"
HeaderText
=
"TAG"
HeaderTooltip
=
"Thread Axial Gap"
SortExpression
=
"ThreadAxialGap"
UniqueName
=
"ThreadAxialGap"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"W"
DataType
=
"System.String"
HeaderText
=
"W"
SortExpression
=
"W"
UniqueName
=
"W"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"FSL"
HeaderTooltip
=
"Face Shoulder Length"
DataField
=
"FaceShoulderLength"
DataType
=
"System.String"
SortExpression
=
"FaceShoulderLength"
UniqueName
=
"FaceShoulderLength"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
And the code behind:
protected
void
RG_Values_ItemCreated(
object
sender, GridItemEventArgs e)
{
if
(e.Item
is
GridCommandItem)
{
GridCommandItem cmdItem = e.Item
as
GridCommandItem;
cmdItem.Controls.Clear();
TableCell commandCell =
new
TableCell();
cmdItem.Controls.Add(commandCell);
if
(!
this
.IsInEditMode)
{
Button editButton =
new
Button();
editButton.Text =
"Edit"
;
editButton.CommandName =
"EditAll"
;
commandCell.Controls.Add(editButton);
}
else
{
Button saveButton =
new
Button();
saveButton.Text =
"Save"
;
saveButton.CommandName =
"SaveAll"
;
commandCell.Controls.Add(saveButton);
}
}
}
protected
void
RG_Values_ItemCommand(
object
sender, GridCommandEventArgs e)
{
if
(e.CommandName ==
"EditAll"
)
{
this
.IsInEditMode =
true
;
}
else
if
(e.CommandName ==
"SaveAll"
)
{
foreach
(GridDataItem item
in
this
.RG_Values.EditItems)
{
if
(item.Edit)
{
item.FireCommandEvent(
"Update"
,
null
);
item.Edit =
false
;
}
}
}
}
protected
void
RG_Values_PreRender(
object
sender, EventArgs e)
{
foreach
(GridItem item
in
this
.RG_Values.Items)
{
item.Edit =
this
.IsInEditMode;
}
this
.RG_Values.Rebind();
}
Any help would be appreciated !
Thanks
Vince