2010-11-25 26 views
0

J'ai lu quelques articles ici et certains sont liés à mon problème, mais pour une raison quelconque, les solutions fournies ne fonctionnent pas pour moi. Fondamentalement, j'ai deux contrôles GridView avec des cases à cocher. Ils ont exactement le même code, mais ne font que déclencher différents événements. Et bien sûr, avoir des identifiants différents et leurs informations uniques pertinentes. Voici la chose étrange, l'un d'eux fonctionne très bien, et l'autre ne fonctionne pas. Je vais poster les deux ici, gardez à l'esprit que celui avec ID = "UnassignElegibilityChk" est l'onte qui ne fonctionne pas. J'ai mis des points d'arrêt pour tester si je suis à l'intérieur de la fonction lorsque j'envoie la publication de la vérification et rien.L'événement OnCheckedChange n'exécute pas mon événement

Note: ces deux arborescences sont sur la même page, donc supposons que la directive codebehind et tous les paramètres sont correctement assignés à la page (puisque l'un d'entre eux fonctionne, je suppose qu'il n'y a pas de problème)

C'est celui qui ne fonctionne pas:

<table><tr><td class="style1"> 
    <asp:GridView ID="ElegibilitySelectedGridview" runat="server" 
     AutoGenerateColumns="False" DataKeyNames="ID" CellPadding="4" 
     ForeColor="#333333" GridLines="None" Width="475px"> 
     <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
    <Columns> 
     <asp:TemplateField HeaderText="ID"> 
      <ItemTemplate> 
       <asp:Label ID="lblID0" runat="server" Text='<%# Bind("ID") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Select"> 
      <ItemTemplate> 
       <asp:CheckBox ID="UnassignElegibilityChk" runat="server" AutoPostBack="true" OnCheckedChanged="UnAssignElegibilityRecord"/> 
      </ItemTemplate>     
     </asp:TemplateField> 
     <asp:boundfield datafield="Name" HeaderText="Elegible Item" /> 
     </Columns> 
     <EditRowStyle BackColor="#999999" /> 
     <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
     <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
     <SortedAscendingCellStyle BackColor="#E9E7E2" /> 
     <SortedAscendingHeaderStyle BackColor="#506C8C" /> 
     <SortedDescendingCellStyle BackColor="#FFFDF8" /> 
     <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
    </asp:GridView> 
    </td></tr></table> 

celui qui travaille est ci-dessous:

<table><tr><td class="style1"> 
<asp:DropDownList ID="ElegibilityGroupDDL" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ElegibilityGroupDDL_SelectedIndexChanged"> 
    <asp:ListItem Value="0">ROOT</asp:ListItem> 
</asp:DropDownList> 
</td></tr><tr><td class="style1"> 
    <asp:TextBox ID="ElegibilityNameTxt" runat="server" Width="464px"></asp:TextBox> 
    </td></tr><tr><td class="style1"> 
    <asp:Button ID="ElegibilitySaveBtn" runat="server" Text="Save Elegibility" /> 
    &nbsp;</td></tr><tr><td class="style1"> 
    <asp:Label ID="ElegibilityMsgLbl" runat="server" Text="" style="color: #0066CC"></asp:Label> 
    </td></tr><tr style="background:silver"><td class="style1"> 
    &nbsp;</td></tr><tr><td class="style1"> 

    <asp:GridView ID="ElegibilityGridView" runat="server" 
     AutoGenerateColumns="False" DataKeyNames="ID" BackColor="White" 
     BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
     ForeColor="Black" GridLines="Vertical" Width="95%"> 
     <AlternatingRowStyle BackColor="White" /> 
    <Columns> 
     <asp:TemplateField HeaderText="ID"> 
      <ItemTemplate> 
       <asp:Label ID="lblID" runat="server" Text='<%# Bind("ID") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Select"> 
      <ItemTemplate> 
       <asp:CheckBox ID="AssignElegibilityChk" runat="server" AutoPostBack="true" OnCheckedChanged="AssignElegibility"/> 
      </ItemTemplate>     
     </asp:TemplateField> 
     <asp:boundfield datafield="Name" HeaderText="Elegible Item" /> 
     </Columns> 
     <FooterStyle BackColor="#CCCC99" /> 
     <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" /> 
     <RowStyle BackColor="#F7F7DE" /> 
     <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" /> 
     <SortedAscendingCellStyle BackColor="#FBFBF2" /> 
     <SortedAscendingHeaderStyle BackColor="#848384" /> 
     <SortedDescendingCellStyle BackColor="#EAEAD3" /> 
     <SortedDescendingHeaderStyle BackColor="#575357" /> 
    </asp:GridView> 
    </td></tr></table> 

les feux gridview travail e est fonction avec succès:

Public Sub AssignElegibility() 
    If Page.IsPostBack Then 
     For Each row As GridViewRow In ElegibilityGridView.Rows 
      Dim checkbox As CheckBox = CType(row.FindControl("AssignElegibilityChk"), CheckBox) 
      'Check if the checkbox is checked.' 
      'value in the HtmlInputCheckBox Value property is set as the //value of the delete commands parameter.' 
      If checkbox.Checked Then 
       ' Retreive the Employee ID' 
       Dim lblID As Label = CType(row.FindControl("lblID"), Label) 
       Dim elegibilityID As Integer = Convert.ToInt32(lblID.Text) 
       Elegibility.AddElegibilityMapping(CInt(Request("ResID")), elegibilityID) 
       ElegibilitySelectedItems(CInt(Request("ResID"))) 
       ElegibilityGroupDDL_SelectedIndexChanged() 
      End If 
     Next 
    End If 
End Sub 

Le non fonctionnant est censé déclencher ce code et il ne l'est pas.

Public Sub UnAssignElegibilityRecord(ByVal sender As Object, ByVal e As System.EventArgs) 
    PrintLine("Inside the sub") 
    If Page.IsPostBack Then 
     For Each row As GridViewRow In ElegibilitySelectedGridview.Rows 
      Dim checkbox As CheckBox = CType(row.FindControl("UnassignElegibilityChk"), CheckBox) 
      'Check if the checkbox is checked.' 
      'value in the HtmlInputCheckBox Value property is set as the //value of the delete commands parameter.' 
      If checkbox.Checked Then 
       ' Retreive the Employee ID' 
       Dim lblID As Label = CType(row.FindControl("lblID0"), Label) 
       Dim elegibilityID As Integer = Convert.ToInt32(lblID.Text) 
       Elegibility.RemoveElegibilityMapping(elegibilityID) 
       ElegibilitySelectedItems(CInt(Request("ResID"))) 
       ElegibilityGroupDDL_SelectedIndexChanged() 
      End If 
     Next 
    End If 
End Sub 
+1

@Jovanky - ajouter "Aide s'il vous plaît" ne va pas vous faire répondre plus rapidement. –

+0

Mon ami, certaines choses viennent comme une seconde nature. Ne faites pas attention à une telle minutie s'il vous plaît. La vie est beaucoup plus simple. Bonne journée! –

+0

Vous n'avez pas deux arborescences mais deux vues en grille. –

Répondre

1

Je ne sais pas si quelque chose de ce qui suit permet de résoudre votre problème, mais ...

  1. pourquoi votre « travail » gestionnaire du CheckedChanged a une signature erronée? Il a besoin de l'expéditeur et des eventsargs.

    protected Sub AssignElegibility(ByVal sender As Object, ByVal e As System.EventArgs)

  2. Pourquoi vous itérer les Gridrows pour obtenir la case correspondante et la ligne qui a changé? Cela fonctionne aussi:

    Dim checkbox As CheckBox = DirectCast(sender,CheckBox)

Pour obtenir la ligne que vous suffit de lancer le NamingContainer de votre Checkbox à GridViewRow.

Dim row as GridViewRow =DirectCast(checkbox.NamingContainer,GridViewRow)

EDIT: Avez-vous REBIND la ElegibilitySelectedGridview-Grid sur Postback? Vous ne devriez le faire que lorsque not Page.IsPostback, sinon les événements ne se déclencheront pas.

+0

Salut Tim, merci pour votre aide, mais j'ai assigné l'expéditeur (ByVal As Object, ByVal et As System.EventArgs) à l'événement de travail juste pour garder la cohérence, mais il n'a rien changé. Aussi, en ce qui concerne l'itération des points de vue, je peux m'étendre sur le fait qu'une fois que j'aurai au moins eu l'occasion de tirer, je veux me concentrer sur ce point. –

+0

Vous me déroutez. Votre gestionnaire de travail a en fait la mauvaise signature: 'Public Sub AssignElegibility()'. Cela devrait entraîner une erreur d'exécution 'n'a pas de signature compatible avec le délégué Delegate Sub EventHandler (expéditeur As Object, e As System.EventArgs)'. –

+0

Ok Tim, mais même sans la signature, il fonctionne. J'ai également pris votre suggestion et ajouté la signature correspondante comme vous l'avez suggéré. Cependant, toujours pas de résultats. Donc, la question de la signature disparaît maintenant parce qu'elle est maintenant là. Une idée de pourquoi l'événement n'est pas déclenché? –