Probleme avec le controle repeater

Résolu
cs_plateau Messages postés 19 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 3 juillet 2008 - 18 juin 2008 à 22:10
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 - 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

6 réponses

ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
22 juin 2008 à 15:36
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
3
cs_plateau Messages postés 19 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 3 juillet 2008
18 juin 2008 à 22:23
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
0
cs_plateau Messages postés 19 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 3 juillet 2008
19 juin 2008 à 16:24
please help..
0
cs_plateau Messages postés 19 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 3 juillet 2008
23 juin 2008 à 20:30
ggtry merci pour ta réponse

je vais essayé dans ce sens
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_plateau Messages postés 19 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 3 juillet 2008
25 juin 2008 à 22:30
merci 

ggtry c'est exactement ce qu'il fallait faire
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
25 juin 2008 à 23:02
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
0
Rejoignez-nous