2010-11-04 6 views
3

J'ai une liste avec pagination. Chaque pagination a 10 lignes avec un nom d'utilisateur, un e-mail et une case à cocher.Comment se souvenir des cases à cocher sélectionnées entre chaque pagination-presse

Je dois être en mesure de cocher quelques cases, dans différentes "paginages", appuyer sur un bouton et envoyer un courriel à chaque utilisateur qui a été vérifié.

Problème, c'est que je ne sais pas vraiment comment mémoriser les cases cochées entre chaque pagination.

Êtes-vous avec moi?

Deos quelqu'un a une solution similaire ou quelques conseils sur la façon de le faire? Je préférerais résoudre ceci sans jQuery, mais ordinare javascript ou une solution C# fonctionne très bien.

Merci d'avance!

Répondre

1

Essayez cette http://forums.asp.net/t/1619741.aspx?Remember+checkboxes+in+ListView

vous pourriez maintenir une liste <> des sélections (ID-dire à chaque enregistrement, valeur unique) et devrait persister cette liste dans le ViewState. mettre à jour la liste sur un changement de page. lier la propriété checked checkbox via une fonction code-behind qui vérifie si l'id est dans la liste.

est ici un échantillon:

 <asp:ListView ID="ListView1" runat="server" OnPagePropertiesChanging="ListView1_PagePropertiesChanging"> 
      <LayoutTemplate> 
       <table id="Table2" runat="server" class="listview" width="100%"> 
        <tr> 
         <td> 
          <table id="itemPlaceholderContainer" runat="server"> 
           <tr> 
            <th> 
            </th> 
            <th> 
            </th> 
            <th id="thid" runat="server" visible="false"> 
             ID 
            </th> 
            <th id="thname" runat="server"> 
             Name 
            </th> 
           </tr> 
           <tr id="itemPlaceholder" runat="server"> 
           </tr> 
          </table> 
         </td> 
        </tr> 
        <tr id="Tr3" runat="server"> 
         <td id="Td2" runat="server" style=""> 
          <asp:DataPager ID="DataPager1" runat="server" PageSize="5" PagedControlID="ListView1" 
           OnPreRender="DataPager1_PreRender"> 
           <Fields> 
            <asp:NumericPagerField /> 
           </Fields> 
          </asp:DataPager> 
         </td> 
        </tr> 
       </table> 
      </LayoutTemplate> 
      <ItemTemplate> 
       <tr> 
        <td> 
         <input type="checkbox" id="CheckBox1" runat="server" value='<%# Eval("ID") %>' checked='<%# Selected(Eval("ID")) %>' /> 
        </td> 
        <td> 
         <asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>' /> 
        </td> 
        <td> 
         <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' /> 
        </td> 
       </tr> 
      </ItemTemplate> 
     </asp:ListView> 

code-behind: 

     List<string> cBoxSelections = new List<string>(); 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       BindListView(); 
      } 
     } 

     private void BindListView() 
     { 
      ListView1.DataSource = CreateDataSource(); 
      ListView1.DataBind(); 
     } 

     protected DataTable CreateDataSource() 
     { 
      DataTable dt = new DataTable(); 
      DataRow dr; 
      dt.Columns.Add(new DataColumn("ID", typeof(Int32))); 
      dt.Columns.Add(new DataColumn("Name", typeof(string))); 
      for (int i = 0; i < 33; i++) 
      { 
       dr = dt.NewRow(); 

       dr[0] = i; 
       dr[1] = string.Concat("Name",i.ToString()); 
       dt.Rows.Add(dr); 
      } 
      return dt; 
     } 

     protected Boolean Selected(object sender) 
     { 
      Boolean flag = false; 
      string ID = Convert.ToString(sender); 
      if (!string.IsNullOrEmpty(ID)) 
      { 
       flag = cBoxSelections.Exists(item => item.Equals(ID)); 
      } 
      return flag; 
     } 

     private void UpdateSelections() 
     { 
      if (ViewState["sel"] != null) 
      { 
       cBoxSelections = (List<string>)ViewState["sel"]; 
      } 
      foreach (ListViewDataItem item in ListView1.Items) 
      { 
       HtmlInputCheckBox cbox = (HtmlInputCheckBox)item.FindControl("CheckBox1"); 
       if (cbox != null) 
       { 
        string selectedItem = cBoxSelections.Find(key => key.Equals(cbox.Value)); 
        if (selectedItem == null) 
        { 
         if (cbox.Checked.Equals(true)) 
         { 
          cBoxSelections.Add(cbox.Value); 
         } 
        } 
        if (selectedItem != null) 
        { 
         if (cbox.Checked.Equals(false)) 
         { 
          cBoxSelections.Remove(cbox.Value); 
         } 
        } 
       } 
      } 
      if (cBoxSelections.Count > 0) 
      { 
       ViewState["sel"] = cBoxSelections; 
      } 
     } 
     protected void DataPager1_PreRender(object sender, EventArgs e) 
     { 
      BindListView(); 
     } 


    protected void ListView1_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e) 
    { 
     UpdateSelections(); 
    } 

vous avez besoin des routines sélectionnés (qui renvoie une valeur booléenne) et UpdateSelections (qui maintient), le reste du code devient simplement le ListView pour démontrer l'échantillon ainsi que des données fictives .

Questions connexes