2016-06-09 4 views
0

Je travaille sur la création d'une page Web en utilisant le contrôle ajax ModalPopupExtender. J'ai un gridview avec un itemtemplate de cases à cocher dedans. Il y a quelques boutons (Enregistrer, Annuler) dans le panneau contenant le gridview. La fenêtre contextuelle s'ouvre correctement et les événements du bouton sont également appelés. Cependant, si je coche/désélectionne l'une des cases à cocher puis clique sur le bouton Sauvegarder, l'état vérifié est toujours faux. J'ai cherché partout sur le web et tout essayé je pouvais. Essayé en utilisant des déclencheurs sans effet. J'ai même créé une page web de démo séparée juste pour tester cela. Jusqu'à présent, pas de chance. Juste Pour votre information, au cas où je remplace le gridview avec textbox dire ou quelque chose, la valeur est correctement reçue du côté serveur. Où pourrais-je me tromper? Ci-joint les extraits:ASP.NET: Les cases à cocher dans un gridview, qui fait partie de ModalPopupExtender, vérifier l'état ne s'envoyé au serveur

<asp:Button ID="exButton" runat="server" Text="Select for BA" /> 
 
<ajaxToolkit:ModalPopupExtender ID="ex_ModalPopupExtender" runat="server" BehaviorID="ex_ModalPopupExtender" TargetControlID="exButton" PopupControlID="Pops" BackgroundCssClass="modal-backdrop" CancelControlID="CancelChange"> 
 
</ajaxToolkit:ModalPopupExtender> 
 

 
<asp:UpdatePanel ID="Pops" runat="server" UpdateMode="Conditional"> 
 
    <ContentTemplate> 
 
    <div class="modal-dialog">Select</div> 
 
     <div class="modal-body" style="overflow: scroll; overflow-x: auto; overflow-y: auto; max-height: 400px;"> 
 
     <asp:GridView ID="gridTable" CssClass="table table-hover table-bordered" runat="server" Style="width: 100%; font-size: small" AutoGenerateColumns="False" DataKeyNames="Title"> 
 
      <Columns> 
 
      <asp:BoundField HeaderText="Title" DataField="Title" /> 
 

 
      <asp:TemplateField HeaderText="Selection"> 
 
       <ItemTemplate> 
 

 
       <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="false" OnCheckedChanged="CheckBox1_CheckedChanged" /> 
 
       </ItemTemplate> 
 
      </asp:TemplateField> 
 
      </Columns> 
 
     </asp:GridView> 
 
     </div> 
 
     <br /> 
 
     <br /> 
 
     <div class="Controls col-xs-offset-4"> 
 
     <input id="SaveBA_OK" type="button" value="Save" name="SaveBA_OK" runat="server" onserverclick="SaveBA_OK_ServerClick" /> 
 
     <input id="CancelChange" type="button" value="Cancel" runat="server" onserverclick="CancelChange_ServerClick" /> 
 
     </div> 
 
     <asp:Label ID="LabelPopup" runat="server" Text="" ForeColor="White"></asp:Label> 
 
    </div> 
 
    </ContentTemplate> 
 
    </asp:UpdatePanel> 
 

Le backend code C# est la suivante:

protected void SaveBA_OK_ServerClick(object sender, EventArgs e) 
 
    { 
 
     
 
     int m = 0; 
 
     
 
      
 
     for (int i = 0; i < gridTable.Rows.Count; i++) 
 
     { 
 
      CheckBox chk = (CheckBox)gridTable.Rows[i].FindControl("CheckBox1"); 
 

 
      if (chk.Checked) 
 
      { 
 
       selectedEx.Rows[m][0] = gridTable.Rows[i].Cells[0]; 
 
       //selectedEx.Rows[m][1] = "1"; 
 
       m = m + 1; 
 
      } 
 

 
     } 
 
     
 
     LabelPopup.Text = "success"; 
 
    }

chk.Checked est toujours faux. Et oui, je coche les cases avant de cliquer sur le bouton Enregistrer. S'il vous plaît aider. : -/

+0

où êtes-vous lié gridview.? – KanisXXX

+0

en cas pageLoad – One

+0

êtes-vous lient votre gridview intérieur 'if (! IsPostBack)'.? – KanisXXX

Répondre

0

Vous pouvez parcourir les lignes à l'aide de la boucle foreach

foreach (GridViewRow row in gridTable.Rows) 
{ 
    CheckBox chk = row.Cells[1].Controls[1] as CheckBox; 
    if ((chk != null) && chk.Checked) 
    { 
      // Do your stuff here... 
    } 
} 

Ce probablement la même chose avec approche différente, mais vous avez défini AutoPostBack false alors pourquoi la OnCheckedChanged

Vérifier votre événement PageLoad

Je vois que vous avez UpdatePanel contrôles. Essayez de configurer un déclencheur dans le UpdatePanel qui contient le GridView pour lier au clic du UpdatePanel avec le bouton de sauvegarde

+0

C'est essentiellement la même chose que ce que j'ai fait. chk.Checked est faux quand même, donc il n'entre jamais dans le if-block. J'ai aussi essayé votre extrait. – One

+0

@One Consultez votre événement de chargement de page. Est-ce que vous lie tous les postback – Chaitanya

+0

Salut Durga, je n'avais pas fait. Maintenant que je l'ai fait, ça a marché !!! Merci .. :) – One