<asp:CheckBox ID="CheckBox11" runat="server" Checked='<%# Eval("active") == DBNull.Value? false: Convert.ToBoolean(Eval("active")) %>' />
protected void RadGrid1_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e)
{
if (e.CommandName == RadGrid.InitInsertCommandName)
{
GridEditCommandColumn editColumn = (GridEditCommandColumn)RadGrid1.MasterTableView.GetColumn("EditCommandColumn");
editColumn.Visible = false;
GridEditableItem editedItem = e.Item as GridEditableItem;
e.Canceled = true;
//Prepare an IDictionary with the predefined values
System.Collections.Specialized.ListDictionary newValues = new System.Collections.Specialized.ListDictionary();
//set initial checked state for the checkbox on init insert
newValues["active"] = true;
//Insert the item and rebind
e.Item.OwnerTableView.InsertItem(newValues);
}
else if (e.CommandName == RadGrid.RebindGridCommandName && e.Item.OwnerTableView.IsItemInserted)
{
e.Canceled = true;
}
else
{
GridEditCommandColumn editColumn = (GridEditCommandColumn)RadGrid1.MasterTableView.GetColumn("EditCommandColumn");
if (!editColumn.Visible)
editColumn.Visible = true;
}
protected void ObjectDataSource1_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
{
e.InputParameters["active"] = ??????
}
Somehow when I tried to save the value of checkbox after click in edit mode or insert mode. It won't take that value. Please help.
Thanks
6 Answers, 1 is accepted
Below is my code. When I tried to update or insert new record, the checkbox updated value never save. Please help
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> <script type="text/javascript"> function RowDblClick(sender, eventArgs) { sender.get_masterTableView().editItem(eventArgs.get_itemIndexHierarchical()); } </script> </telerik:RadCodeBlock> <p id="divMsgs" runat="server"> <asp:Label ID="Label1" runat="server" EnableViewState="False" Font-Bold="True" ForeColor="#FF8080"> </asp:Label> <asp:Label ID="Label2" runat="server" EnableViewState="False" Font-Bold="True" ForeColor="#00C000"> </asp:Label> <telerik:RadGrid ID="RadGrid1" runat="server" CellSpacing="0" DataSourceID="ObjectDataSource1" GridLines="None" AllowPaging="True" PageSize="20" AllowSorting="True" AutoGenerateColumns="False" ShowStatusBar="True" AllowAutomaticInserts="True" AllowAutomaticUpdates="True" OnItemInserted="RadGrid1_ItemInserted" OnItemUpdated="RadGrid1_ItemUpdated" OnItemCommand="RadGrid1_ItemCommand" OnPreRender="RadGrid1_PreRender"> <MasterTableView AutoGenerateColumns="False" DataKeyNames="TrainingID" CommandItemDisplay="TopAndBottom" DataSourceID="ObjectDataSource1"> <Columns> <telerik:GridEditCommandColumn> </telerik:GridEditCommandColumn> <telerik:GridBoundColumn DataField="TrainingID" DataType="System.Int32" FilterControlAltText="Filter TrainingID column" HeaderText="TrainingID" ReadOnly="True" SortExpression="TrainingID" UniqueName="TrainingID"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="name" FilterControlAltText="Filter name column" HeaderText="name" SortExpression="name" UniqueName="name"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="description" FilterControlAltText="Filter description column" HeaderText="description" SortExpression="description" UniqueName="description"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="completionDescription" FilterControlAltText="Filter completionDescription column" HeaderText="completionDescription" SortExpression="completionDescription" UniqueName="completionDescription"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="startDate" DataType="System.DateTime" FilterControlAltText="Filter startDate column" HeaderText="startDate" SortExpression="startDate" UniqueName="startDate" DataFormatString="{0:d}"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="endDate" DataType="System.DateTime" FilterControlAltText="Filter endDate column" HeaderText="endDate" SortExpression="endDate" UniqueName="endDate" DataFormatString="{0:d}"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="termsAndConditions" FilterControlAltText="Filter termsAndConditions column" HeaderText="termsAndConditions" SortExpression="termsAndConditions" UniqueName="termsAndConditions"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="lastUpdated" DataType="System.DateTime" FilterControlAltText="Filter lastUpdated column" HeaderText="lastUpdated" SortExpression="lastUpdated" UniqueName="lastUpdated" DataFormatString="{0:d}"> </telerik:GridBoundColumn> <telerik:GridCheckBoxColumn DataField="active" DataType="System.Boolean" FilterControlAltText="Filter active column" HeaderText="active" SortExpression="active" UniqueName="active"> </telerik:GridCheckBoxColumn> </Columns> <EditFormSettings EditFormType="Template"> <EditColumn UniqueName="EditCommandColumn1" FilterControlAltText="Filter EditCommandColumn1 column"></EditColumn> <FormTemplate> <table id="Table2" cellspacing="2" cellpadding="1" width="100%" border="0" rules="none" style="border-collapse: collapse;"> <tr class="EditFormHeader"> <td colspan="2" style="font-size: small"> <b>Training Details</b> </td> </tr> <tr> <td colspan="2"> <b>Training Info:</b> </td> </tr> <tr> <td> <table id="Table3" cellspacing="1" cellpadding="1" width="250" border="0" class="module"> <tr> <td> </td> <td> </td> </tr> <tr> <td> Name: </td> <td> <asp:TextBox ID="TextBox7" runat="server" Text='<%# Bind("name") %>'> </asp:TextBox> </td> </tr> <tr> <td> Description: </td> <td> <asp:TextBox ID="TextBox8" runat="server" Text='<%# Bind("description") %>' TabIndex="1" TextMode="MultiLine" Rows="2" Columns="20"> </asp:TextBox> </td> </tr> <tr> <td> Completion Description: </td> <td> <asp:TextBox ID="TextBox9" runat="server" Text='<%# Bind("completionDescription") %>' TabIndex="2" TextMode="MultiLine" Rows="5" Columns="40"> </asp:TextBox> </td> </tr> <tr> <td> Start Date: </td> <td> <telerik:RadDatePicker ID="StartDatePicker" runat="server" MinDate="1/1/1900" DbSelectedDate='<%# Bind("startDate") %>' TabIndex="4"> </telerik:RadDatePicker> <asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ControlToValidate="StartDatePicker" ErrorMessage="Enter a date!" CssClass="Validator"></asp:RequiredFieldValidator> </td> </tr> <tr> <td> Start Date: </td> <td> <telerik:RadDatePicker ID="EndDatePicker" runat="server" MinDate="1/1/1900" DbSelectedDate='<%# Bind("endDate") %>' TabIndex="4"> </telerik:RadDatePicker> <asp:RequiredFieldValidator runat="server" ID="Requiredfieldvalidator2" ControlToValidate="EndDatePicker" ErrorMessage="Enter a date!" CssClass="Validator"></asp:RequiredFieldValidator> </td> </tr> <tr> <td colspan="3"> <asp:CompareValidator ID="dateCompareValidator" runat="server" ControlToValidate="EndDatePicker" ControlToCompare="StartDatePicker" Operator="GreaterThan" Type="Date" CssClass="Validator" ErrorMessage="The second date must be after the first one.<br /><br />"> </asp:CompareValidator> </td> </tr> <tr> <td> Active?: </td> <td> <asp:CheckBox ID="CheckBox11" runat="server" Checked='<%# Eval("active") == DBNull.Value? false: Convert.ToBoolean(Eval("active")) %>' /> </tr> </table> </td> <td> <table id="Table1" cellspacing="1" cellpadding="1" width="250" border="0" class="module"> <tr> <td> Terms and Conditions: </td> </tr> <tr> <td> <telerik:RadEditor ID="RadEditor1" runat="server" content='<%# Bind("termsAndConditions") %>' Width="300px" > <Modules> <telerik:EditorModule Name="RadEditorStatistics" Visible="false" Enabled="true"> </telerik:EditorModule> <telerik:EditorModule Name="RadEditorDomInspector" Visible="false" Enabled="true"> </telerik:EditorModule> <telerik:EditorModule Name="RadEditorNodeInspector" Visible="false" Enabled="true"> </telerik:EditorModule> <telerik:EditorModule Name="RadEditorHtmlInspector" Visible="false" Enabled="true"> </telerik:EditorModule> </Modules> </telerik:RadEditor> </td> </tr> </table> </td> </tr> <tr> <td align="right" colspan="2"> <asp:Button ID="btnUpdate" Text='<%# (Container is GridEditFormInsertItem) ? "Insert" : "Update" %>' runat="server" CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>'> </asp:Button> <asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False" CommandName="Cancel"></asp:Button> </td> </tr> </table> </FormTemplate> </EditFormSettings> </MasterTableView> <ClientSettings> <ClientEvents OnRowDblClick="RowDblClick"></ClientEvents> </ClientSettings> </telerik:RadGrid> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" InsertMethod="InsertTraining" OldValuesParameterFormatString="original_{0}" SelectMethod="GetData" TypeName="dsTrainingTableAdapters.TrainingDetailsTableAdapter" UpdateMethod="UpdateTraining" onupdating="ObjectDataSource1_Updating" oninserting="ObjectDataSource1_Inserting"> <InsertParameters> <asp:Parameter Name="name" Type="String" /> <asp:Parameter Name="description" Type="String" /> <asp:Parameter Name="completionDescription" Type="String" /> <asp:Parameter Name="startDate" Type="DateTime" /> <asp:Parameter Name="endDate" Type="DateTime" /> <asp:Parameter Name="termsAndConditions" Type="String" /> <asp:Parameter Name="lastUpdated" Type="DateTime" /> <asp:Parameter Name="active" Type="Boolean"/> </InsertParameters> <UpdateParameters> <asp:Parameter Name="name" Type="String" /> <asp:Parameter Name="description" Type="String" /> <asp:Parameter Name="completionDescription" Type="String" /> <asp:Parameter Name="startDate" Type="DateTime" /> <asp:Parameter Name="endDate" Type="DateTime" /> <asp:Parameter Name="termsAndConditions" Type="String" /> <asp:Parameter Name="lastUpdated" Type="DateTime" /> <asp:Parameter Name="active" Type="Boolean" /> <asp:Parameter Name="Original_TrainingID" Type="Int32" /> </UpdateParameters> </asp:ObjectDataSource> </p> protected void Page_Load(object sender, EventArgs e) { } protected void RadGrid1_ItemInserted(object source, GridInsertedEventArgs e) { if (e.Exception != null) { e.ExceptionHandled = true; e.KeepInInsertMode = true; DisplayMessage(true, "Training ID cannot be inserted. Reason: " + e.Exception.Message); } else { DisplayMessage(false, "Training class inserted"); } } protected void RadGrid1_ItemUpdated(object source, Telerik.Web.UI.GridUpdatedEventArgs e) { if (e.Exception != null) { e.KeepInEditMode = true; e.ExceptionHandled = true; DisplayMessage(true, "TrainingID " + e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["TrainingID"] + " cannot be updated. Reason: " + e.Exception.Message); } else { DisplayMessage(false, "TrainingID " + e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["TrainingID"] + " updated"); } } private void DisplayMessage(bool isError, string text) { Label label = (isError) ? this.Label1 : this.Label2; label.Text = text; } protected void RadGrid1_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e) { if (e.CommandName == RadGrid.InitInsertCommandName) { GridEditCommandColumn editColumn = (GridEditCommandColumn)RadGrid1.MasterTableView.GetColumn("EditCommandColumn"); editColumn.Visible = false; GridEditableItem editedItem = e.Item as GridEditableItem; e.Canceled = true; //Prepare an IDictionary with the predefined values System.Collections.Specialized.ListDictionary newValues = new System.Collections.Specialized.ListDictionary(); //set initial checked state for the checkbox on init insert newValues["active"] = true; //Insert the item and rebind e.Item.OwnerTableView.InsertItem(newValues); } else if (e.CommandName == RadGrid.RebindGridCommandName && e.Item.OwnerTableView.IsItemInserted) { e.Canceled = true; } else { GridEditCommandColumn editColumn = (GridEditCommandColumn)RadGrid1.MasterTableView.GetColumn("EditCommandColumn"); if (!editColumn.Visible) editColumn.Visible = true; } } protected void RadGrid1_PreRender(object sender, EventArgs e) { if (!Page.IsPostBack) { RadGrid1.EditIndexes.Add(0); RadGrid1.Rebind(); } } protected void ObjectDataSource1_Updating(object sender, ObjectDataSourceMethodEventArgs e) { e.InputParameters["lastUpdated"] = DateTime.Now; } protected void ObjectDataSource1_Inserting(object sender, ObjectDataSourceMethodEventArgs e) { e.InputParameters["lastUpdated"] = DateTime.Now; }
It seems that the value for the CheckBox control is generated with Eval(), which is used as evaluating expression. It provides one-way binding for the control. Try using Bind() for the value of the Checked property.
<asp:CheckBox ID="CheckBox11" runat="server" Checked='<%# Bind("active") %>' />Let me know if this approach is working for you.
Regards,
Viktor Tachev
Telerik
Thanks
Thank you for writing back.
When trying to insert a new record the RadGrid opens an edit form and tries to bind the values in it with the values from the datasource. As this data is not existent in insert mode the returned values are null. The RadGrid is trying to convert null to the corresponding data type for each column which results in the mentioned exception.
In order to avoid this you need to set a default value for the columns where two-way data binding is set and their values need to be updated in the data source. The approach for implementing this is illustrated in the "Setting predefined values for different column editors" section in this article. Note that the value for the DefaultInsertValue property is of type System.String.
Also ensure that the column in the database bound to the CheckBox control is of type Boolean.
I hope this information helps.
Regards,
Viktor Tachev
Telerik
