2009-05-20 9 views
0

Je suis un problème avec CheckBoxList et OnSelectedIndexChanged:ASP.NET: Problème avec CheckBoxList et OnSelectedIndexChanged

  <asp:UpdatePanel runat="server"> 
       <ContentTemplate> 

        <asp:CheckBoxList 
         id="lstWatchEType" 
         runat="server" 
         DataTextField="DescriptionText" 
         DataValueField="Id" 
         AutoPostBack="true" 
         OnSelectedIndexChanged="lstWatchEType_SelectedIndexChanged"/> 

       </ContentTemplate> 
      </asp:UpdatePanel> 

Ceci est renseigné dans Page_Load

public static void PopulateWatchEType(CheckBoxList list, Guid clientId) 
     { 
      OffertaDataContext db = new OffertaDataContext(); 

      var ds = (from e in db.EnquiryTypes select new { 
       Id = e.Id, 
       DescriptionText = e.DescriptionText, 
       IsWatching = !db.WatchXrefEnquiryTypes.Any(f => f.ClientId.Equals(clientId) && f.EnquiryTypeId==e.Id && f.Inbox==false) 
      }); 

      list.DataSource = ds; 
      list.DataBind(); 

      foreach(var item in ds) 
      { 
       list.Items.FindByValue(item.Id.ToString()).Selected = item.IsWatching; 
      } 
     } 

Mon problème est (IsPostBack!) :

protected void lstWatchEType_SelectedIndexChanged(Object sender, EventArgs e) 
    { 
     ListItem item = lstWatchEType.SelectedItem; 
     ... 
    } 

Où l'élément est toujours le premier élément de la liste ???

+0

Vous pouvez jeter un oeil à la réponse d'Aaron, j'ai supprimé le mien. – Kirtan

Répondre

2

La propriété d'élément sélectionné renvoie l'élément sélectionné avec l'index le plus bas dans la liste. Si le premier élément est sélectionné, il renverra le premier élément.

Pour obtenir le dernier élément sélectionné, vous pouvez peut-être créer une variable globale et définir cette variable sur l'index modifié. Vous pouvez créer une collection ListItem qui contient d'abord tous les index sélectionnés initialement, comme suggéré par Kirtan, puis créer une nouvelle collection contenant toutes les sélections les plus récentes chaque fois que l'index sélectionné est modifié. Faites correspondre les deux listes, et quel que soit l'élément de la nouvelle liste qui ne figure pas dans l'ancienne liste correspond à votre dernier index sélectionné.

Espérons que cela aide.

Questions connexes