IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[GridView] Conserver l'état des CheckBoxes lorsque je passe à une autre page


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 373
    Points : 110
    Points
    110
    Par défaut [GridView] Conserver l'état des CheckBoxes lorsque je passe à une autre page
    Bonjour,

    J'ai un gridview dans lequel j'ai ajouté une colonne qui contient CheckBox pour séléctionner des lignes.

    Parfois, ce gridview contient plusieurs pages (pagination activé), et lorsque je séléctionne une ligne et je passe à la page suivante alors la séléction disparaît.

    J'ai trouvé un article sur ce point: lien .
    Mais pour mon cas, j'ai déjà un sqDatasource pour ce gridview et alors un message d'erreur s'affiche:
    Le dataSource et le DataSourceID sont tous deux définis sur 'GridView1'. Supprimez une définition.
    Merci pour vos aides.

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Tu peux nous mettre un peu de ton code s'il te plaît?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Bonjour

    Le dataSource et le DataSourceID sont tous deux définis sur 'GridView1'. Supprimez une définition.
    Cette erreur survient lorsque tu as à la fois :

    • Une DataSource spécifiée dans le markup de ta page (ObjectDataSource ou SqlDataSource dans ton cas). Celle-ci est rattachée à ta GridView grâce à la property DataSourceID.
    • Une collection, ou DataTable ou autre type de DataSource que tu passes à la property DataSource de ta GridView dans le code-behind de ta page. Puis appel à la méthode DataBind de ta GridView.

    Tu ne peux faire les deux à la fois, cela va de soit. Le message d'erreur est (presque) clair : "Supprimez un(e des deux) définition(s)".

    En espérant t'avoir aidé.

  4. #4
    CUCARACHA
    Invité(e)
    Par défaut
    Salut,

    C'est un problème récurent lorsque tu veux gérer des objets de données multipages.

    Pour ma part, je travaille avec des sources de données sérializables que je peux donc stocker dans le viewstate.

    Je sauve donc mes modification dans cette source de données tampon.

    A la fiin, lorsque je sauve, un seul click suffit pour sauvegarder toutes les modifs.

    Ca évite d'avoir à marquer les enregistrements comme n'étant pas encore validés.

    ++

    Laurent

  5. #5
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 373
    Points : 110
    Points
    110
    Par défaut
    Merci à tous,

    Voilà mon code:

    test9.aspx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
        CodeFile="test9.aspx.cs" Inherits="test9" Title="Untitled Page" %>
     
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
        <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" />
     
     
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="IDPRODUIT"
                    DataSourceID="SqlDataSource1" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging">
                    <Columns>
                        <asp:BoundField DataField="IDPRODUIT" HeaderText="IDPRODUIT" ReadOnly="True" SortExpression="IDPRODUIT" />
                        <asp:BoundField DataField="NOMPRODUIT" HeaderText="NOMPRODUIT" SortExpression="NOMPRODUIT" />
                        <asp:BoundField DataField="DESCRIPTION" HeaderText="DESCRIPTION" SortExpression="DESCRIPTION" />
                        <asp:TemplateField HeaderText="Choisir..">
                            <ItemTemplate>
                                <asp:CheckBox ID="CheckBox1" runat="server" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
     
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:GSCartographieV1ConnectionString %>"
            SelectCommand="SELECT [IDPRODUIT], [NOMPRODUIT], [DESCRIPTION] FROM [PRODUITS]">
        </asp:SqlDataSource>
     
    </asp:Content>

    test9.aspx.cs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
        private const string QUERY_SELECT_ALL_CATEGORIES = "SELECT * FROM [PRODUITS]";
     
        private void BindData()
        {
            ConnectionStringSettings connex = ConfigurationManager.ConnectionStrings["V1ConnectionString"];
            string connectString = connex.ConnectionString;
     
            SqlConnection myConnection = new SqlConnection(connectString);
            SqlDataAdapter ad = new SqlDataAdapter(QUERY_SELECT_ALL_CATEGORIES,
            myConnection);
            DataSet ds = new DataSet();
            ad.Fill(ds, "produits");
            GridView1.DataSource = ds;
            GridView1.DataBind();
        }
     
     
        private void RememberOldValues()
        {
            ArrayList categoryIDList = new ArrayList();
            int index = -1;
            foreach (GridViewRow row in GridView1.Rows)
            {
                index = (int)GridView1.DataKeys[row.RowIndex].Value;
                bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;
     
                // Check in the Session
                if (Session["CHECKED_ITEMS"] != null)
                    categoryIDList = (ArrayList)Session["CHECKED_ITEMS"];
                if (result)
                {
                    if (!categoryIDList.Contains(index))
                        categoryIDList.Add(index);
                }
                else
                    categoryIDList.Remove(index);
            }
            if (categoryIDList != null && categoryIDList.Count > 0)
                Session["CHECKED_ITEMS"] = categoryIDList;
        }
     
        private void RePopulateValues()
        {
            ArrayList categoryIDList = (ArrayList)Session["CHECKED_ITEMS"];
            if (categoryIDList != null && categoryIDList.Count > 0)
            {
                foreach (GridViewRow row in GridView1.Rows)
                {
                    int index = (int)GridView1.DataKeys[row.RowIndex].Value;
                    if (categoryIDList.Contains(index))
                    {
                        CheckBox myCheckBox = (CheckBox)row.FindControl("CheckBox1");
                        myCheckBox.Checked = true;
                    }
                }
            }
        }
     
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            RememberOldValues();
            GridView1.PageIndex = e.NewPageIndex;
            BindData();
            GridView1.DataBind();
            RePopulateValues();
        }
    Laurent Jordi: Vous pouvez me donner un petit exemple ou un lien SVP ?

  6. #6
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Bonjour,

    Tu aurais pu quand même écouter ce qu'on te dit et choisir soit l'utilisation d'une DataSource dans le markup de ta page, soit un BindData dans la code-behind.

    As-tu testé au moins ?

  7. #7
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 373
    Points : 110
    Points
    110
    Par défaut
    Nicolas Esprit: J'ai testé ce que tu as proposé, mais ça marche pas:
    Si j'enleve dataSourceID : une page blanche
    Si j'enleve BindData(): les séléctions perdues

  8. #8
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 373
    Points : 110
    Points
    110
    Par défaut
    J'ai trouvé ce tutoriel : http://www.asp.net/Learn/data-access...ial-52-cs.aspx
    mais, malheureusement même s'il est un tutoriel officiel il ne traite pas ce défaut.

    Est-ce que vous avez des solutions SVP, et merci beaucoup.

  9. #9
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 373
    Points : 110
    Points
    110
    Par défaut
    Louange à Dieu, Seigneur de l'univers.

    Enfin j'ai trouvé la solution:

    lien

    Merci pour tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fancytree - Modifier les états des checkbox
    Par laloune dans le forum jQuery
    Réponses: 0
    Dernier message: 01/10/2014, 15h00
  2. Réponses: 1
    Dernier message: 15/03/2012, 18h54
  3. Réponses: 3
    Dernier message: 04/05/2010, 09h55
  4. Cochez un checkbox qui est sur une autre page
    Par fabien14 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/09/2009, 12h27
  5. Comment supprimer des fichiers lorsqu'on quitte une interface
    Par ZAYDOUN dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 23/04/2007, 23h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo