复选框!指定的强制转换无效

本文关键字:转换 无效 复选框 | 更新日期: 2023-09-27 18:20:03

我遇到了这样的错误:当我尝试向包含项模板复选框的网格添加新行时,指定的强制转换无效,如下所示。每当我使用单词"Checked"而不是"Text"时,就会显示错误。但我想做的是,当我的"choiceQn"为true时,显示复选框"checked",而不是在复选框旁边显示"true"。如果你能解决我的问题,请帮帮我。

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();
    }

堆栈跟踪:

[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

复选框!指定的强制转换无效

在使用nvarchar(1)时,请尝试对CheckBox:的Checked属性使用Eval()

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

或者考虑使用与'<%# Bind("ChoiceQn") %>'/ 兼容的布尔数据类型

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

与Convert.ToBoolean()兼容的布尔数据类型

我不能得到你想要的。如果要将行添加到GridView,则不需要您的代码。您应该将行添加到数据源中,然后调用DataBind()。

此代码有效:

 <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>
Checked='<%# (Boolean)Eval("Active")  %>'