CheckBox! Specified cast is not valid

匿名 (未验证) 提交于 2019-12-03 09:02:45

问题:

i had this error: specified cast is not valid when i try to add a new row to my grid that contain a itemtemplate checkbox as shown below. Whenever i use the word "Checked" instead of "Text", the error is shown. But what i want to do is to show the checkbox "checked" when my "choiceQn" is true and not show the "true" next to my checkbox. Please help me out if you can solve my problem.

ASP.NET

 <ItemTemplate>      <asp:CheckBox ID="ChoiceCheckBox" runat="server" **Checked**='<%# Bind("ChoiceQn") %>'/>  </ItemTemplate> 

C#

    private void AddNewRowToGrid()     {         int rowIndex = 0;         if (ViewState["CurrentTable"] != null)         {             DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];             DataRow drCurrentRow = null;              if (dtCurrentTable.Rows.Count > 0)             {                 for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)                 {                     TextBox box1 = (TextBox)UpdateQuestionGrid.Rows[rowIndex].Cells[0].FindControl("QuestionsTbx");                      drCurrentRow = dtCurrentTable.NewRow();                     drCurrentRow["QuestionId"] = i + 1;                     drCurrentRow["Question"] = "";                     drCurrentRow["ChoiceQn"] = false;                     rowIndex++;                 }                  //add new row to DataTable                 dtCurrentTable.Rows.Add(drCurrentRow);                  //Store the current data to ViewState                 ViewState["CurrentTable"] = dtCurrentTable;                  //Rebind the Grid with the current data                 UpdateQuestionGrid.DataSource = dtCurrentTable;                 UpdateQuestionGrid.DataBind();             }         }         else         {             Response.Write("ViewState is null");         }          //Set Previous Data on Postbacks         //SetPreviousData();     } 

Stack Trace:

[InvalidCastException: Specified cast is not valid.]    ASP.asc_questionupdate_aspx.__DataBinding__control15(Object sender, EventArgs e) in f:\ASC_FeedbackSystem(latest)\ASC_FeedbackSystem\asc\questionupdate.aspx:26    System.Web.UI.Control.OnDataBinding(EventArgs e) +99    System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +92    System.Web.UI.Control.DataBind() +15    System.Web.UI.Control.DataBindChildren() +211    System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102    System.Web.UI.Control.DataBind() +15    System.Web.UI.Control.DataBindChildren() +211    System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102    System.Web.UI.Control.DataBind() +15    System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource) +155    System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +2417    System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +57    System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +14    System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +114    System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +31    System.Web.UI.WebControls.DataBoundControl.PerformSelect() +142    System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73    System.Web.UI.WebControls.GridView.DataBind() +4    ASC_FeedbackSystem.questionupdate.AddNewRowToGrid() in F:\ASC_FeedbackSystem(latest)\ASC_FeedbackSystem\asc\questionupdate.aspx.cs:108    ASC_FeedbackSystem.questionupdate.ButtonAdd_Click(Object sender, EventArgs e) in F:\ASC_FeedbackSystem(latest)\ASC_FeedbackSystem\asc\questionupdate.aspx.cs:161    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110    System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565 

回答1:

As you're using nvarchar(1), try using Eval() for the Checked property of your CheckBox:

<ItemTemplate>       <asp:CheckBox ID="ChoiceCheckBox" runat="server" Checked='<%# Eval("ChoiceQn").ToString().Equals("1") %>'/> </ItemTemplate> 

Or consider using a boolean data type that's compatible with '<%# Bind("ChoiceQn") %>'/



回答2:

<asp:TemplateField HeaderText="Accident Benefit">                     <ItemTemplate>                         <asp:CheckBox ID="lblcbaccident" runat="server" Checked='<%#Convert.ToBoolean(Eval("Accident")) %>' />                     </ItemTemplate>                 </asp:TemplateField> 

boolean data type that's compatible with Convert.ToBoolean()



回答3:

I cann't get what you want. If you are going to add row to GridView then you don't need your code. You should add row just to your data source and after that call DataBind().



回答4:

This code works:

 <asp:TemplateField HeaderText="Activo">             <ItemStyle Width="150px"></ItemStyle>             <ItemTemplate>                 <asp:CheckBox ID="CheckBoxItem" Checked='<%# DataBinder.Eval(Container.DataItem,"Activo").ToString().Equals("1") %>' Enabled="false" runat="server"></asp:CheckBox>             </ItemTemplate>             <EditItemTemplate>                 <asp:CheckBox ID="CheckBoxEdit" Checked='<%# DataBinder.Eval(Container.DataItem,"Activo").ToString().Equals("1") %>' runat="server"></asp:CheckBox>             </EditItemTemplate> 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!