none
passage d'une web part à une autre RRS feed

  • Question


  • bonjour à tous
    j'ai mis ce post dans un autre forum mais n'ai pas obtenu e réponse et vraiment je suis coincé ...
    qq pourrait til me conseillé pour le pb suivant :
     en gros j'ai une webpart(1) qui ramène des données via linq et j'affiche cela dans un datagrid. j'ai ajouté une colonne dans laquelle j'ai mis un bouton "détail", le but etant vous l'avez deviné d'acceder à toutes les infos detail de la dite ligne J'ai créé une seconde webpart(2) qui me ramène les infos détalsl en faisant une requete sur l'id de la ligne cliquée. ce que j'arrive pas écrire c'est le bout de code qui va sur l'évènement clic de mon bouton "détail" . ci dessous un bout de code test qui écrit simplement dans une textbox, le nom de la ligne à éditer : Code :
    void mygrid_AccesDetail(object sender, DataGridCommandEventArgs e) { 
    lblMessage.Width = 750; lblMessage.Text = "Ligne a editer en page detail : " + e.Item.Cells[2].Text + " " + e.Item.Cells[3].Text; } 
    Comment passer à partir de là sur webpart2 ??? j'ai essayé response.redirect mais je suis "hors contexte" ???
    je pense que je dois creer deux webPart séparés et ensuite les inclure dans mes pages sharepoint mais je sais pas comment coder ^ce passage d'une page à l'autre
    désolé car ça doit vraiment être simple mais je coince .... Merci à vous tous Bonne journée Alain
    mardi 27 octobre 2009 09:30

Réponses

  • Bonsoir,

    Je pensais que vous vouliez mettre ces webparts dans la même page...

    Si vous voulez les mettre dans des pages différentes, une solution est de passer l'id dans l'url :
    Ajoutez un query string pour que l'URL de destination soit la suivante :
    http://.....detail.aspx?id=[ID]

    Vous pourrez ainsi récupérer cet id dans la page détail en lisant tout simplement la valeur du QueryString.

    Donc :

    Page "donnees.aspx" :
    sur le click du bouton, rediriger vers la page detail.aspx?id=[ID]
    [ID] étant l'id de l'élément sélectionné

    Page "detail.aspx" ;
    Au chargement de la page, récupérer l'id en utilisant le QueryString:
    Page.Request.QueryString["id"]

    En esperant que ça vous aide,
    Sylvain
    • Proposé comme réponse Sylvain ReverdyEditor mardi 27 octobre 2009 21:17
    • Marqué comme réponse algeox mercredi 28 octobre 2009 11:44
    mardi 27 octobre 2009 21:17
    Auteur de réponse

Toutes les réponses

  • Bonjour,

    Pour passer des données d'une webpart à une autre, un mécanisme existe déjà :
    Il s'agit des connexions entre webpart.

    Vous allez définir une interface (ou en utiliser une existante) contenant une déclaration de propriété avec la donnée à échanger

    ex :
    public Interface IMyDataInterface
    {
    int SelectedDataId{get;}
    }

    puis faire implémenter cette interface par votre webpart(1)

    Et utiliser cette interface dans la webpart(2)

    Il faut par contre, quand la webpart(2) se charge, que la webpart(1) sache quelle ligne est sélectionnée.


    Un exemple tout simple ici : http://ablog.apress.com/?p=1300
    Plus d'explications ici : http://stephaneey.developpez.com/tutoriel/sharepoint/webpartavances/
    Explication Microsoft : http://msdn.microsoft.com/fr-fr/library/ms469765.aspx

    Bonne journée,
    Sylvain
    mardi 27 octobre 2009 10:52
    Auteur de réponse
  • ok Sylvain
    Merci pour votre aide.
    Je vous tiens au courant de la suite
    Alain
    mardi 27 octobre 2009 14:32
  • re bonsoir Sylvain ..
    faut il vraiment passer par toute cette complexité pour joindre deux pages ???????????????????
    ne serait il pas plus simple de :
    1/ faire une webpart(1) qui recupere toute une table et installer cette webpart dans une page "MES DONNEES EN LISTE" du site sharepoint
    2/ faire une procedure stockée avec un parametre en entree (l'id de la ligne selectionnée sur la page 1)
        integrer cette procedure dans une webpart(2) via linq etc ....  et l'installer sur une page "PAGE DETAIL"

    3/ faire un lien depuis la page "MES DONNEES EN LISTE" ver la page "DETAIL" en lui passant l'id de la ligne selectionée 'en colonne masqueé par exemple) ????

    ET DANS CE CAS ? Comment appeler la page "detail" ???

    Merci pour votre aide
    Alain
    mardi 27 octobre 2009 15:40
  • Bonsoir,

    Je pensais que vous vouliez mettre ces webparts dans la même page...

    Si vous voulez les mettre dans des pages différentes, une solution est de passer l'id dans l'url :
    Ajoutez un query string pour que l'URL de destination soit la suivante :
    http://.....detail.aspx?id=[ID]

    Vous pourrez ainsi récupérer cet id dans la page détail en lisant tout simplement la valeur du QueryString.

    Donc :

    Page "donnees.aspx" :
    sur le click du bouton, rediriger vers la page detail.aspx?id=[ID]
    [ID] étant l'id de l'élément sélectionné

    Page "detail.aspx" ;
    Au chargement de la page, récupérer l'id en utilisant le QueryString:
    Page.Request.QueryString["id"]

    En esperant que ça vous aide,
    Sylvain
    • Proposé comme réponse Sylvain ReverdyEditor mardi 27 octobre 2009 21:17
    • Marqué comme réponse algeox mercredi 28 octobre 2009 11:44
    mardi 27 octobre 2009 21:17
    Auteur de réponse
  • bonjour Sylvain
    ok pour votre reponse .... je connaissais bien ce principe mais la le pb c'est que jsuis dans une webpart (donc page .cs et non aspx )

    dans le datagrid (mygrid) que j'utilise pour recuperer mes données j'ai utilisé cette definition

     

    ButtonColumn mybut = new ButtonColumn();

     

     

    pour ajouter le bouton "détail " dans mon datagrid

    ensuite, je gere le clic sur le bouton detail en y asscociant un evenement de cette façon

    mygrid.ItemCommand += (mygrid_AccesDetail);
    et à partir de cette fonction mygrid_AccesDetail , je voudrais faire un lien sur une seconde page. Le pb étant que je n'ai acces à aucune methode de redirection à partir du bouton  mybut

    ceci passe tres bien

    void mygrid_AccesDetail(object sender, DataGridCommandEventArgs e)
    {
    lblMessage.Text = "Ligne a editer en page detail : " + e.Item.Cells[2].Text + " " + e.Item.Cells[3].Text;
    }

     

     

    je recupere bien l'identifiant à passer dans ma zone texte de test, mais à partir de quel objet dois-je je utiliser la redirection ??
    le bouton mybut. xxxxx ne propose rien de plausible ...

    merci
    Alain

    mercredi 28 octobre 2009 11:22
  • Sylvain
    j'ai trouvé !!! en vous ecrivant le mail precedent je me suis rendu compte que je ne partais peut être pas du bon objet et du coup , en repartant de ll'instance mygrid de mon datagrid je retrouve bien page.response.redirect à laquelle je n'ai qu'a rajouter l'identifiant de la ligne.
    Merci bcp pour votre aide
    cordialement
    Alain
    mercredi 28 octobre 2009 11:44