2009-09-08 11 views
0

Comment enregistrer l'état de ma liste de cases à cocher dans le cadre du cycle de vie de la page?Etat du magasin de ma liste de cases à cocher

Ici j'ai un contrôle de liste de cases à cocher non lié où les valeurs proviennent du fichier XML.

comment conserver l'état?

En outre, lorsque je clique sur le bouton Suivant pour la nouvelle page et l'état de retour est conservé.

Mais quand je clique sur le bouton de retour et viens dans le même état de la page ne sont pas conservées

Protected Sub chkBx_SR_wu_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles chkBx_SR_wu.SelectedIndexChanged 
Dim i As Integer 
i = 0 
Try 
    For i = 0 To chkBx_SR_wu.Items.Count - 1 
     If chkBx_SR_wu.Items(i).Selected Then 
      Select Case chkBx_SR_wu.Items(i).Value 
       Case "SR_MR" 
        chkbx_SR.Checked = True 
       Case "Sk_MR" 
        chkbx_SkRoom.Checked = True 
       Case "SC_SS" 
        chkbx_admin.Checked = True 
       Case "CS_MR" 
        chkbx_salesFloor.Checked = True 
       Case "TEAM_LEADER" 
        rb_tl.Enabled = True 
        chkbx_tlAdmin.Enabled = True 
        chkbx_tlJewellery.Enabled = True 
        chkbx_tlSalesFloor.Enabled = True 
        chkbx_tlSkRoom.Enabled = True 
        rb_tl.Items(0).Enabled = True 
        rb_tl.Items(1).Enabled = True 
        rb_tl.Items(2).Enabled = True 
        rb_tl.Items(3).Enabled = True 
        ReqiredFieldValidator1.Enabled = True 



      End Select 
     Else 
      Select Case chkBx_SR_wu.Items(i).Value 
       Case "SR_MR" 
        chkbx_SR.Enabled = False 
        chkbx_SR.Checked = False 
       Case "Sk_MR" 
        chkbx_SkRoom.Enabled = False 
        chkbx_SkRoom.Checked = False 
       Case "SC_SS" 
        chkbx_admin.Enabled = False 
        chkbx_admin.Checked = False 
       Case "CS_MR" 
        chkbx_salesFloor.Enabled = False 
        chkbx_salesFloor.Checked = False 
       Case "TEAM_LEADER" 
        chkbx_tlAdmin.Enabled = False 
        chkbx_tlAdmin.Checked = False 
        chkbx_tlJewellery.Enabled = False 
        chkbx_tlJewellery.Checked = False 
        chkbx_tlSalesFloor.Enabled = False 
        chkbx_tlSalesFloor.Checked = False 
        chkbx_tlSkRoom.Enabled = False 
        chkbx_tlSkRoom.Checked = False 
        rb_tl.Items(0).Enabled = False 
        rb_tl.Items(1).Enabled = False 
        rb_tl.Items(2).Enabled = False 
        rb_tl.Items(3).Enabled = False 
        ReqiredFieldValidator1.Enabled = False 
      End Select 
     End If 
    Next 

Catch ex As Exception 

End Try 

End Sub »

Répondre

0

Ma première hypothèse, sans voir votre code, est que vous êtes liant la checkboxlist sur Page_Load sans vérifier si le chargement de la page est un postback.Faites cela et il devrait résoudre le problème

+0

ce que je dois faire? –

+0

Le code est donné ci-dessus .. il n'y a pas de code dans l'événement page_load –

+0

Je suis un débutant ici s'il vous plaît aider –

0

Vous devez vérifier où vous liez les données à la liste de contrôle. le code que vous avez publié, mais où que vous soyez bindin g le code. Assurez-vous que vous vérifiez qu'IsPostBack est faux ou que chaque fois que votre page se charge, vous rétablissez vos données et perdez tout votre état. Vous devriez seulement lier une fois. Par exemple, (en C#):

if (!IsPostBack) 
{ 
    BindMyDataToCheckBoxList(); 
} 

Mettez un point de rupture où vous liant les données, je parie que chaque fois que vous quoi que ce soit faire comme cliquer sur un bouton ou autre, que le code de liaison est d'être frappé qui ne devrait probablement pas être .

0

Il n'existe aucune méthode garantie pour conserver les valeurs si elles reviennent sur la page, mais pas si elles utilisent le bouton Précédent. Vous pouvez essayer de définir les en-têtes de page afin que la page ne soit pas mise en cache par mesure de précaution contre l'utilisateur qui voit des données non valides.

Dans l'étape Page_Init du cycle de vie de la page, vous pouvez remplir votre liste de cases à cocher avec les valeurs de votre fichier XML, puis dans l'étape Page_Load, vérifier que la page n'est pas postée et cocher les cases les valeurs dans la session.

Par exemple. en C# -

protected void Page_Init(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // Populate checkbox list from XML 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     List<string> list = Session["MyList"] as List<string>; 

     if (list != null) 
     { 
      foreach (int val in list) 
      { 
       ListItem chk = myCheckBoxList.Item.FindByValue(val); 

       if (chk != null) 
        chk.Checked = true; 
      } 
     } 
    } 
} 

protected void SaveButton_Click(object sender, EventArgs e) 
{ 
    List<string> list = new List<string>(); 

    foreach (ListItem li in myCheckBoxList.Items) 
    { 
     if (li.Checked) 
     { 
      list.Add(li.Value); 
     } 
    } 

    Session["MyList"] = list; 
} 

Ce code n'a pas été testé, mais pourrait être utilisé comme point de départ. Vous pouvez convertir le code en VB.NET en utilisant un convertisseur de code, such as the one from Telerik.

0

Vous pouvez conserver l'état des cases à cocher à travers/sur les pages soit par:

  • Cookie
  • Sessions
  • ViewState
  • ou Enregistrer dans Base de données.

Je recommanderais Sessions car il est assez trivial à utiliser, et ne les oblige pas à avoir des cookies activés.

Un didacticiel simple sur les sessions peut être trouvé here. C'est une version C#.

Here est un vb.exemple net (mais pas de MSDN)

Questions connexes