复选框!指定的强制转换无效
本文关键字:转换 无效 复选框 | 更新日期: 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") %>'