2012-09-24 70 views
0

我正在使用Visual Studio 2010與C#。複選框類型轉換

我有一個問題,在我的ascx頁面一個我創建了一個複選框列如下:

<asp:TemplateField ItemStyle-HorizontalAlign="left" HeaderStyle-HorizontalAlign="Left" HeaderText="Beetald"> 
    <HeaderTemplate> 
     <input type="checkbox" id="selectallTeachers" class="selectallTeachers" onclick="javasctipt:SelectheaderCheckboxesTeacher();" /> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <input type="checkbox" id="chkPaid" class="caseTeacher" name="caseTeacher" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 

我創建的JavaScript這樣的:

<script type="text/javascript"> 
    // Select/Deselect checkboxes based on header checkbox 
    function SelectheaderCheckboxesTeacher() { 
     if ($("#selectallTeachers").val() == 'on') { 
      $('.caseTeacher').attr('checked', 'checked'); 
      $("#selectallTeachers").val('off'); 
     } 
     else if ($("#selectallTeachers").val() == 'off') { 
      $('.caseTeacher').removeAttr("checked"); 
      $("#selectallTeachers").val('on'); 
     } 

     $(".caseTeacher").click(function() { 
      if ($(".caseTeacher").length == $(".caseTeacher:checked").length) { 
       $("#selectallTeachers").attr("checked", "checked"); 
       $("#selectallTeachers").val('off'); 
      } else { 
       $("#selectallTeachers").removeAttr("checked"); 
       $("#selectallTeachers").val('on'); 
      } 
     }); 
    } 
    // if all checkbox are selected, check the selectallTeachers checkbox 
    // and viceversa 
</script> 

對於ButtonClick事件我這樣寫:

protected void btnDeleteSelectedMessages_Click(object sender, EventArgs e) 
{ 
    if (currentGridView == null) 
     setCurrentGridView(); 

    //controleer voor elke rij welke checkbox is geselecteerd 
    foreach (GridViewRow row in currentGridView.Rows) 
    { 
     CheckBox cb = (CheckBox)row.FindControl("chkPaid"); 
     Guid messageID = (Guid)currentGridView.DataKeys[row.DataItemIndex].Value; 

     //als de checkbox is geselecteerd het bericht verwijderen 
     if (cb != null && cb.Checked) 
     { 
      if (currentGridView.ID.Equals("Messages")) 
       b.BussinesMessageReceiver.DeleteMessageReceiver(messageID, MessageBoxPerson); 
      else if (currentGridView.ID.Equals("MessagesSent")) 
       b.BussinesMessage.DeleteMessageSender(messageID); 
      else //MessagesDeleted 
       b.BussinesMessage.DeleteMessage(messageID, (Page.Server.MapPath("~/Upload/") + messageID)); 
      continue; 
     } 
    } 
    btnDeleteSelectedMessages.Enabled = false; 
    selectLocation.Visible = false; 
    clearSelectedMessageSession(); 

    //Update the GridView 
    BindGridView(); 
} 

它顯示就行了錯誤

CheckBox cb = (CheckBox)row.FindControl("chkPaid"); 

,因爲我已經輸入類型的複選框創建不直接。

+0

爲什麼你不能使用複選框,而不是投入? –

+0

如果您指定顯示的錯誤類型會更好。 –

+0

什麼類型的'row.FindControl(「chkBoxDelete」);'實際返回? – ChrisF

回答

1

input type="checkbox"不是CheckBox。所以你應該把它改爲HtmlInputCheckBox(或使用CheckBox)。

var cb = (HtmlInputCheckBox)row.FindControl("chkPaid"); 
+0

這也給我的紅線下(HtmlInputCheckBox) –

+1

然後加上'使用System.Web.UI.HtmlControls'。我認爲這將是明確的,因爲我提供了一個鏈接,我的意思是什麼。 –

+0

我仍然有同樣的問題無法投入'System.Web.UI.WebControls.CheckBox'類型的對象來鍵入'System.Web.UI.HtmlControls.HtmlInputCheckBox'。我改變了cade as .. var cb =(System.Web.UI.HtmlControls.HtmlInputCheckBox)row.FindControl(「chkBoxDelete」); –