【问题标题】:CheckBox! Specified cast is not valid复选框!指定的演员表无效
【发布时间】:2012-01-10 07:40:17
【问题描述】:

我遇到了这个错误:specified cast is not valid 当我尝试向我的网格中添加一个包含 itemtemplate 复选框的新行时,如下所示。每当我使用“已检查”一词而不是“文本”时,都会显示错误。但是我想要做的是在我的“choiceQn”为真时显示“选中”复选框,而不是在我的复选框旁边显示“真”。如果你能解决我的问题,请帮助我。

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

【问题讨论】:

  • 我不知道,但我确实想知道为什么要遍历现有表,为表中的每一行创建一个新行(在内存中),并且对这些行不做任何事情,除了在当你对最后一个做某事时结束。你想在那里实现什么目标?
  • 我只是用复选框替换了文本框,但是当我尝试使用 "Checked='" 添加新行时会遇到错误
  • ChoiceQn 是什么数据类型,您使用的是 SQL 还是 MySQL?
  • 嘿,它的 nvarchar(1),但在课堂上我把它当作布尔值。

标签: c# asp.net


【解决方案1】:

当您使用 nvarchar(1) 时,请尝试将 Eval() 用于 CheckBox 的 Checked 属性:

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

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

【讨论】:

  • 但是如果程序员想要检查 OldValues 和 NewValues 怎么办?如果您不使用 Bind(),那么您将失去该功能。
【解决方案2】:
<asp:TemplateField HeaderText="Accident Benefit">
                    <ItemTemplate>
                        <asp:CheckBox ID="lblcbaccident" runat="server" Checked='<%#Convert.ToBoolean(Eval("Accident")) %>' />
                    </ItemTemplate>
                </asp:TemplateField>

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      此代码有效:

       <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>
      

      【讨论】:

        【解决方案5】:
        Checked='<%# (Boolean)Eval("Active")  %>'
        

        【讨论】:

        • 不要只发布代码,还要说明它如何解决问题。另请考虑您将这个答案发布到一个 6 岁以上的问题,该问题已经有几个答案,其中一个甚至被接受。考虑专注于回答较新的问题或尚未得到公认答案的问题。
        猜你喜欢
        • 1970-01-01
        • 2018-02-06
        • 1970-01-01
        • 1970-01-01
        • 2014-11-17
        相关资源
        最近更新 更多