2012-01-10 2 views
2

У меня была эта ошибка: Указанный прилив недействителен, когда я пытаюсь добавить новую строку в мою сетку, которая содержит флажок itemtemplate, как показано ниже. Всякий раз, когда я использую слово «Проверено» вместо «Текст», отображается ошибка. Но я хочу показать, что флажок «проверен», когда мой «choiceQn» является истинным, а не показывать «true» рядом с моим флажком. Пожалуйста, помогите мне, если вы сможете решить мою проблему.CheckBox! Указанный сброс недействителен

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

Я не знаю, но я задаюсь вопросом, почему вы перебираете существующую таблицу, создавая новую строку (в памяти) для каждой строки таблицы и ничего не делая с этими строками , за исключением конца, когда вы делаете что-то с последним. Что вы пытаетесь достичь там? –

+0

http://geekswithblogs.net/dotNETvinz/archive/2009/06/04/adding-dynamic-rows-in-gridview-with-textboxes.aspx –

+0

Я просто заменил текстовые поля флажком, но я столкнулся бы с ошибкой, когда Я попытался добавить новую строку с помощью «Checked = '<% # Bind (« ChoiceQn »)%>« –

ответ

2

Как вы используете nvarchar(1), попробуйте использовать Eval() для зарегистрированного имущества Вашего CheckBox:

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

Или рассмотреть вопрос об использовании логического типа данных, который совместим с '<%# Bind("ChoiceQn") %>'/

+1

Но что, если программист хочет проверить OldValues ​​и NewValues? Если вы не используете Bind(), вы теряете эту функциональность. – Fandango68

0

Я можите получить то, что вы хотите. Если вы собираетесь добавить строку в GridView, вам не нужен ваш код. Вы должны добавить строку только к источнику данных и после этого вызова DataBind().

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> 
1
<asp:TemplateField HeaderText="Accident Benefit"> 
        <ItemTemplate> 
         <asp:CheckBox ID="lblcbaccident" runat="server" Checked='<%#Convert.ToBoolean(Eval("Accident")) %>' /> 
        </ItemTemplate> 
       </asp:TemplateField> 

булевы данные тип, совместимый с Convert.ToBoolean()

Смежные вопросы