Probleme avec le controle repeater [Résolu]

cs_plateau 19 Messages postés lundi 18 février 2008Date d'inscription 3 juillet 2008 Dernière intervention - 18 juin 2008 à 22:10 - Dernière réponse : ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention
- 25 juin 2008 à 23:02
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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 22 juin 2008 à 15:36
3
Merci
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

Merci ggtry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de ggtry
cs_plateau 19 Messages postés lundi 18 février 2008Date d'inscription 3 juillet 2008 Dernière intervention - 18 juin 2008 à 22:23
0
Merci
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
Commenter la réponse de cs_plateau
cs_plateau 19 Messages postés lundi 18 février 2008Date d'inscription 3 juillet 2008 Dernière intervention - 19 juin 2008 à 16:24
0
Merci
please help..
Commenter la réponse de cs_plateau
cs_plateau 19 Messages postés lundi 18 février 2008Date d'inscription 3 juillet 2008 Dernière intervention - 23 juin 2008 à 20:30
0
Merci
ggtry merci pour ta réponse

je vais essayé dans ce sens
Commenter la réponse de cs_plateau
cs_plateau 19 Messages postés lundi 18 février 2008Date d'inscription 3 juillet 2008 Dernière intervention - 25 juin 2008 à 22:30
0
Merci
merci 

ggtry c'est exactement ce qu'il fallait faire
Commenter la réponse de cs_plateau
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 25 juin 2008 à 23:02
0
Merci
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
Commenter la réponse de ggtry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.