Probleme avec le controle repeater [Résolu]

Signaler
Messages postés
19
Date d'inscription
lundi 18 février 2008
Statut
Membre
Dernière intervention
3 juillet 2008
-
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
-
Bonjour,


j'espère vraiment que qq un peut m'aider la dessus car cela fait un bout de
temps que j'essais mais en vain,

alors, j'ai deux tables, 1 c'est les titres et 2 c'est les auteurs des livres
(1 à plusieurs)


dans ma page aspx j'ai créer un repeater (parent) pour afficher les titres, et
un autre repeater (child) pour afficher les auteurs correspondants,





mon but est d'afficher 5 résultats par page, le

voici mon code

 protected void Page_Load(object sender, System.EventArgs e)
    {
        if (!IsPostBack)
        {
            intPageSize.Text = "5";
            intCurrIndex.Text = "0";
            DataBind();
        }
    }
    protected void DataBind()
    {
        OleDbConnection connection = new OleDbConnection();
        // mettre la connection en string pour pouvoir la recuperer dans l'adaptateur
        connection.ConnectionString = "ma chaine de connection";
        connection.Open();
        OleDbDataAdapter cmd1 = new OleDbDataAdapter(" select * from table 1 ", connection);
        OleDbDataAdapter cmd2 = new OleDbDataAdapter("select * from table 2 ", connection);

        //Create and fill the DataSet.
        DataSet ds = new DataSet();
        int a = Convert.ToInt32(intCurrIndex.Text);
        int b = Convert.ToInt32(intPageSize.Text);
        cmd1.Fill(ds,a , b, "table1");
       
        intRecordCount.Text = Convert.ToString(ds.Tables["table 1"].Rows.Count);
        //Create a second DataAdapter for the Stock table.
        cmd2.Fill(ds, "table 2");
        //Create the relation bewtween the product and stock tables.
        ds.Relations.Add("myrelation", ds.Tables["table 1"].Columns["ID_ASS"], ds.Tables["table 2"].Columns["ID_ASS"]);
        //Bind the product table to the parent Repeater control, and call DataBind.
        parentRepeater.DataSource = ds.Tables["table 1"];
        Page.DataBind();
        connection.Close();

        lblstop.Text = Convert.ToString(Convert.ToInt32(Convert.ToInt32(intRecordCount.Text) / Convert.ToInt32(intPageSize.Text)) + 1);
        PrintStatus();
    }
  
  
l'erreur que j'ai est la suivante: System.ArgumentException:
Cette contrainte ne peut pas être activée, car toutes les valeurs n'ont
pas de valeurs parentes correspondantes.
et elle au niveau de : ds.Relations.Add("myrelation", ds.Tables["table 1"].Columns["ID_ASS"], ds.Tables["table 2"].Columns["ID_ASS"]);

PS: quand j'enleve le a et b de cmd1.Fill(ds,a , b, "table1"); je n'ai plus d'erreur mais il m'affiche tous les résultats dans une seule page

Help please

6 réponses

Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonjour,

Je ne suis pas sûr que le code dont tu pars puisse accepter les conditions de pagination que tu essaies de lui imposer.
Le problème tient au fait que si ton premier dataset est rempli avec une limitation du nombre de résultat, le second ne l'est pas : or, problème supplémentaire, avec une relation one-many, comment prévoir la limitation ?
A mon avis, puisque l'un des deux repeater est dépendant des données de l'autre, tu devrais plutôt différencier leur remplissage : n'impose la condition de pagination que sur le repeater "maître", et ensuite, il suffira de remplir le second repeater avec la relation clef de la ligne du premier repeater en prenant le premier contrôle pour source du second.
Faire les deux dans le même sous-programme me semble très difficile dans ton cas.

GGtry
Messages postés
19
Date d'inscription
lundi 18 février 2008
Statut
Membre
Dernière intervention
3 juillet 2008

autre precision c'est que si je met dans intPageSize un nombre superieur à nombre de resultats, tout se passe bien et il n'y a pas de bug que ce soit je met a et b comme ca

cmd1.Fill(ds,a , b, "table1");
       
        intRecordCount.Text = Convert.ToString(ds.Tables["table 1"].Rows.Count);
        //Create a second DataAdapter for the Stock table.
        cmd2.Fill(ds,a, b, "table 2");

ou sans a et b
Messages postés
19
Date d'inscription
lundi 18 février 2008
Statut
Membre
Dernière intervention
3 juillet 2008

please help..
Messages postés
19
Date d'inscription
lundi 18 février 2008
Statut
Membre
Dernière intervention
3 juillet 2008

ggtry merci pour ta réponse

je vais essayé dans ce sens
Messages postés
19
Date d'inscription
lundi 18 février 2008
Statut
Membre
Dernière intervention
3 juillet 2008

merci 

ggtry c'est exactement ce qu'il fallait faire
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonsoir,

Je suis content que cela marche.
Une petite question de curiosité à laquelle tu n'es pas obligé de répondre (je m'intéresse aux questions bibliographiques) :
quel est le thème de la liste de livres ? et quel système d'indexation as-tu adopté ?

GGtry