2017-06-15 2 views
1

Le problème est que lorsque je coche la case, cela fonctionne très bien, mais lorsque je coche la case à cocher à la page suivante. les cases à cocher de la page précédente ne sont pas cochées. Checked box L'événement Checked/Unchecked déclenche l'événement CheckedChanged. Mais quand je coche la case dans la liste suivante de listview, je décoche les cases de la liste précédente.Dans la liste de lecture paginée L'événement CheckBox_CheckedChanged ne fonctionne pas

code ListView.aspx

<table class=" example1 table table-bordered table-striped"> 
<thead> 
     <tr> 
<th>Sr no.</th> 
        <th>Parent Category</th> 
        <th>Title</th> 
        <th>Description</th> 
        <th>Image</th> 
        <th>Show on Homepage</th> 
        <th>Edit</th> 
        <th>Delete</th> 
</tr> 
</thead> 
     <tbody> 
     <asp:ListView ID="ListCourse" runat="server" OnItemCommand="ListCourse_ItemCommand" DataKeyNames="CID"> 
<LayoutTemplate> 
        <tr id="ItemPlaceholder" runat="server"> 
        </tr> 
        </LayoutTemplate> 
        <ItemTemplate> 
         <tr class="gradeA"> 
          <td> 
           <asp:Label ID="lblSrno" runat="server" Text='<%# Container.DataItemIndex+1 %>'></asp:Label> 
</td> 
<td> 
                <asp:Label ID="lbl" runat="server" Text='<%# GetCourse(Convert.ToInt32(Eval("CatID"))) %>'></asp:Label> 
               </td> 
               <td> 
                <asp:Label ID="Lbltitle" runat="server" Text='<%# Eval("Title") %>'></asp:Label> 
                <asp:Label ID="lablc" runat="server" Visible="false" Text='<%# Eval("CID") %>'></asp:Label> 
               </td> 
               <td> 
                <asp:Label ID="lblDescrption" runat="server" Text='<%# (Eval("Description").ToString().Length <=200)?Eval("Description").ToString(): Eval("Description").ToString().Substring(0, 200) + "..."%>'></b></asp:Label> 
               </td> 
<td> 
                <img class="img_show " src="/Gallery/<%# Eval("Image")%>"> 
               </td> 
               <td> 
                <asp:CheckBox ID="CheckCourse" runat="server" Style="margin-left: 50px;" OnCheckedChanged="CheckCourse_CheckedChanged" AutoPostBack="true" /> 
               </td> 
               <td> 
                <asp:LinkButton ID="LinkEdit" runat="server" PostBackUrl='<%# "Add_New_Course.aspx?ID="+ Eval("CID")%>'>Edit</asp:LinkButton> 
               </td> 
               <td> 
                <asp:LinkButton ID="LinkDelete" runat="server" CommandName="DeleteCourse" CommandArgument='<%# Eval("CID") %>' OnClientClick='return confirm("Do you want to delete record ??")'> Delete</asp:LinkButton> 
               </td> 
              </tr> 
             </ItemTemplate> 
            </asp:ListView> 
           </tbody> 
          </table> 

code Derrière CheckedChanged

protected void CheckCourse_CheckedChanged(object sender, EventArgs e) 
     { 
      CheckBox checkhome = (CheckBox)sender; 
      ListViewItem item = (ListViewItem)checkhome.NamingContainer; 
      ListViewDataItem dataItem = (ListViewDataItem)item; 
      string code = ListCourse.DataKeys[dataItem.DisplayIndex].Value.ToString(); 
      int CID = Convert.ToInt32(code); 
      Course_Master objnew = DB.Course_Master.Single(p => p.CID == CID); 
      bool IsHome = CheckOnHome(CID); 
      if (IsHome == true) 
      { 
       if (checkhome.Checked == false) 
       { 
        objnew.ShowOnHomePage = false; 
       } 
      } 
      else 
      { 
       if (checkhome.Checked == true) 
       { 
        objnew.ShowOnHomePage = true; 
       } 
      } 
      DB.SaveChanges(); 
     } 

Répondre

0

Merci les gars pour l'aide. Je l'ai résolu en utilisant une procédure simple en supprimant les cases à cocher de ListView et en ajoutant du texte à la place de celui-ci, que la case soit cochée ou non (Oui/Non). Comme je pensais que ce sera la meilleure façon de résoudre mon problème.

0

Il ne se déclenche pas parce que lorsque le postback tire le serveur ne connaît pas la état précédent de la case à cocher, il ne sait donc pas s'il a été modifié ou non.

Essayez de définir la valeur par défaut à false et il devrait fonctionner

<asp:CheckBox ID="CheckCourse" runat="server" Checked="false" Style="margin-left: 50px;" OnCheckedChanged="CheckCourse_CheckedChanged" AutoPostBack="true" /> 
+1

Merci @Matt .. mais ça ne marche pas .. :(.. Quand je coche la case à cocher sur la page Listview 1, il décoche la case à cocher sur la page 2 et vice versa. help .. –

+0

@JayPatel essayez d'ajouter un OnItemDataBound à la vue de la liste .. à l'intérieur de l'onitemdatabound vous définissez checked = false ou true pour chaque élément .. et avez-vous eu pagin sur cette liste? – Matt

+0

@ Matt ... J'ai déjà ajouté OnItemDataBound à listview .. et Set Checked = true ou false selon les données dans la base de données Et j'ai Paging dans Listview L'erreur est là seulement .. quand je vérifie un élément sur la page Listview 1 autres éléments de la page sont décochés .. don 'y sais pourquoi cela se produit .. –

0

Vous devez enregistrer ids quelque part de l'élément de la liste vérifiée. Comme lorsque vous passez à la page 2 de ListView, il a perdu son état précédent. Stockez les données dans viewstate et chargez-les à partir de là. Pour lire et lier, vous devez gérer les gestionnaires d'événements PagePropertiesChanging et ItemDataBound de ListView.

Voici une bonne explication au sujet Maintaining the state of checkboxes in ListView

S'il vous plaît donner 1 si elle a aidé. À votre santé!

+0

Merci pour votre aide –

+0

De rien, n'oubliez pas de voter pour la réponse si cela vous a aidé.Cheers! :) –