复选框!指定演员表无效

时间:2012-01-10 07:40:17

标签: c# asp.net

我遇到此错误:当我尝试向网格中添加包含itemtemplate复选框的新行时,指定的强制转换无效,如下所示。每当我使用“Checked”而不是“Text”时,就会显示错误。但我想要做的是当我的“choiceQn”为真时显示“已检查”复选框,而不是在我的复选框旁边显示“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

5 个答案:

答案 0 :(得分:3)

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

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

或者考虑使用与'<%# Bind("ChoiceQn") %>'/

兼容的布尔数据类型

答案 1 :(得分: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()

答案 2 :(得分:0)

我无法得到你想要的东西。如果您要向GridView添加行,那么您就不需要代码了。您应该只在数据源中添加行,然后再调用DataBind()。

答案 3 :(得分:0)

此代码有效:

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

答案 4 :(得分:0)

Checked='<%# (Boolean)Eval("Active")  %>'