I have a client side data bind on my RadGrid. The Delete and Update Commands work perfectly, but when I try to insert a new row my code breaks at the Checkbox bind with the following: "Specified cast is not valid." I am new to C#, Asp, and Telerik controls, any help would be greatly appreciated.
Here is my Page Code:
and my code Behind (C#):
Here is my Page Code:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ValidationEdit.aspx.cs" Inherits="EditPages_ValidationEdit" MasterPageFile="~/EUEMain.master" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<
asp:Content
ID
=
"Content1"
ContentPlaceHolderID
=
"cphLeftNav"
runat
=
"Server"
>
<
asp:HyperLink
ID
=
"HomeLink"
runat
=
"server"
NavigateUrl
=
"..\Default.aspx"
Text
=
"Home"
/>
<
br
/>
<
asp:HyperLink
ID
=
"AddLink"
runat
=
"server"
Text
=
"Status Edit Page"
/>
<
br
/>
</
asp:Content
>
<
asp:Content
ID
=
"Content2"
ContentPlaceHolderID
=
"cphContent"
runat
=
"Server"
>
<
h1
>Subdivision Statuses</
h1
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
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:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadGrid1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadGrid1"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
runat
=
"server"
/>
<
div
id
=
"Testing"
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
DataSourceID
=
"SqlDataSourceSub"
AllowPaging
=
"True"
AllowAutomaticUpdates
=
"True"
AllowAutomaticInserts
=
"True"
AllowAutomaticDeletes
=
"true"
AllowSorting
=
"true"
AutoGenerateColumns
=
"False"
OnItemUpdated
=
"RadGrid1_ItemUpdated"
OnPreRender
=
"RadGrid1_PreRender"
OnItemInserted
=
"RadGrid1_ItemInserted"
>
<
MasterTableView
AutoGenerateColumns
=
"False"
CommandItemDisplay
=
"TopAndBottom"
DataKeyNames
=
"StatusId"
DataSourceID
=
"SqlDataSourceSub"
>
<
Columns
>
<
telerik:GridEditCommandColumn
>
</
telerik:GridEditCommandColumn
>
<
telerik:GridBoundColumn
DataField
=
"StatusID"
HeaderText
=
"Status ID"
UniqueName
=
"StatusID"
Visible
=
"False"
/>
<
telerik:GridBoundColumn
DataField
=
"StatusType"
HeaderText
=
"Status Type"
UniqueName
=
"StatusType"
Visible
=
"False"
/>
<
telerik:GridBoundColumn
DataField
=
"Description"
HeaderText
=
"Description"
UniqueName
=
"Description"
/>
<
telerik:GridCheckBoxColumn
DataField
=
"Visible"
HeaderText
=
"Visible"
UniqueName
=
"Visible"
/>
<
telerik:GridButtonColumn
CommandName
=
"Delete"
Text
=
"Delete"
UniqueName
=
"column"
/>
</
Columns
>
<
EditFormSettings
EditFormType
=
"Template"
>
<
FormTemplate
>
<
table
id
=
"table1"
>
<
tr
>
<
td
>Subdivision Status Details</
td
>
</
tr
>
<
tr
>
<
td
>
<
table
id
=
"Table2"
>
<
tr
>
<
td
>Status ID</
td
>
<
td
>
<
asp:Label
runat
=
"server"
ID
=
"StatusIdLabel"
Text='<%#Bind("StatusId") %>' Visible="False"></
asp:Label
>
</
td
>
</
tr
>
<
tr
>
<
td
>Status Type</
td
>
<
td
>
<
asp:TextBox
runat
=
"server"
ID
=
"StatusTypeTextBox"
Text='<%#Bind("StatusType") %>'></
asp:TextBox
>
</
td
>
</
tr
>
<
tr
>
<
td
runat
=
"server"
>Description</
td
>
<
td
>
<
asp:TextBox
runat
=
"server"
ID
=
"DescriptionTextBox"
Text='<%#Bind("Description") %>'></
asp:TextBox
>
</
td
>
</
tr
>
<
tr
>
<
td
>Visible</
td
>
<
td
>
<
asp:CheckBox
Checked='<%#Bind("Visible") %>' ID="VisibleCheckBox" runat="server" />
</
td
>
</
tr
>
<
tr
>
<
td
>
<
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
>
</
td
>
</
tr
>
</
table
>
</
FormTemplate
>
</
EditFormSettings
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
div
>
<
asp:SqlDataSource
ID
=
"SqlDataSourceSub"
runat
=
"server"
ConnectionString="<%$ ConnectionStrings:PtcDbModelEntities %>"
DeleteCommand="DELETE FROM [dbo].[Status] WHERE [StatusId] = @StatusId"
InsertCommand="INSERT INTO [dbo].[Status] ([StatusType], [Description], [Visible], VALUES (@StatusType, @Description, @BitVisible)"
SelectCommand="SELECT [StatusId], [StatusType], [Visible], [Description] FROM [dbo].[Status] where StatusType = 'S'"
UpdateCommand="UPDATE [dbo].[Status] SET [StatusType] = @StatusType, [Description] = @Description, Visible = @Visible WHERE [StatusId] = @StatusId">
<
DeleteParameters
>
<
asp:Parameter
Name
=
"StatusId"
Type
=
"Int32"
></
asp:Parameter
>
</
DeleteParameters
>
<
InsertParameters
>
<
asp:Parameter
Name
=
"StatusType"
Type
=
"String"
></
asp:Parameter
>
<
asp:Parameter
Name
=
"Description"
Type
=
"String"
></
asp:Parameter
>
<
asp:Parameter
Name
=
"Visible"
Type
=
"Boolean"
></
asp:Parameter
>
</
InsertParameters
>
<
UpdateParameters
>
<
asp:Parameter
Name
=
"StatusType"
Type
=
"String"
></
asp:Parameter
>
<
asp:Parameter
Name
=
"Description"
Type
=
"String"
></
asp:Parameter
>
<
asp:Parameter
Name
=
"Visible"
Type
=
"Boolean"
></
asp:Parameter
>
<
asp:Parameter
Name
=
"StatusId"
Type
=
"Int32"
/>
</
UpdateParameters
>
</
asp:SqlDataSource
>
using System;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
public partial class EditPages_ValidationEdit : BNSF.EUECommonApplication.EUEBasePage
{
protected void Page_Load(object sender, EventArgs e)
{
AddLink.NavigateUrl = @"..\EditPages\ValidationEdit.aspx";
}
protected void RadGrid1_ItemUpdated(object source, Telerik.Web.UI.GridUpdatedEventArgs e)
{
SqlDataSourceSub.UpdateParameters["Description"].DefaultValue = e.ToString();
SqlDataSourceSub.UpdateParameters["StatusType"].DefaultValue = e.ToString();
SqlDataSourceSub.UpdateParameters["Visible"].DefaultValue = e.ToString();
if (e.Exception != null)
{
e.KeepInEditMode = true;
e.ExceptionHandled = true;
DisplayMessage(true, "Status " + e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["StatusId"] + " cannot be updated. Reason: " + e.Exception.Message);
}
else
{
DisplayMessage(false, "Status " + e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["StatusId"] + " updated");
}
}
protected void RadGrid1_ItemInserted(object source, GridInsertedEventArgs e)
{
SqlDataSourceSub.InsertParameters["StatusType"].DefaultValue = e.ToString();
SqlDataSourceSub.InsertParameters["Description"].DefaultValue = e.ToString();
SqlDataSourceSub.InsertParameters["Visible"].DefaultValue = e.ToString();
}
protected void RadGrid1_ItemDeleted(object source, GridDeletedEventArgs e)
{
if (e.Exception != null)
{
e.ExceptionHandled = true;
DisplayMessage(true, "Status " + e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["StatusId"] + " cannot be deleted. Reason: " + e.Exception.Message);
}
else
{
DisplayMessage(false, "Status " + e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["StatusId"] + " deleted");
}
}
private void DisplayMessage(bool isError, string text)
{
Label label = (isError) ? this.Label1 : this.Label2;
label.Text = text;
}
protected void RadGrid1_ItemCommand(object source, GridCommandEventArgs e)
{
if (e.CommandName == RadGrid.InitInsertCommandName) //"Add new" button clicked
{
GridEditCommandColumn editColumn = (GridEditCommandColumn)RadGrid1.MasterTableView.GetColumn("EditCommandColumn");
editColumn.Visible = false;
}
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();
}
}
}