none
aide requete sql linqdatasource RRS feed

  • Question

  • Bonjour,

    Voila je voudrais filtrer ma linqdatasource avec l'username de l'utilisateur connecter.

    pour ce faire je suis passé par une session mais cela ne marche pas terrible. Comment puis-je faire autrement.

    Voici ce que j'ai fait :

    <% string variable = Page.User.Identity.Name.ToString(); %>

    <% Session ["Matricule"] = variable; %>

    <asp:LinqDataSource ID="LinqDataSource1" runat"server" ContextTypeName="LiaisonPersonnelDataContext" TableName="Personnel" where="Matricule == @Matricule">

    <WhereParameters> <asp:SessionParameter Name="Matricule" SessionField="Matricule" type="String" /></WhereParameters>

    </asp:LinqDataSource>

    Puis-je passer directement par la variable sans passer par une session, et comment ?

    mardi 25 mai 2010 09:21

Réponses

  • cela fonctionne cela venais tout betement de mon linqdatasource2 et non 1 !!!!

    par contre dès que j'enlève les lignes de session :

    <% string variable = Page.User.Identity.Name.ToString(); %>

    <% Session ["Matricule"] = variable; %>

    marche plus. Or c'est se que je veux faire

    • Marqué comme réponse Alex Petrescu vendredi 28 mai 2010 08:46
    mardi 25 mai 2010 14:34

Toutes les réponses

  • Bonjour,

    Avez vous vérifiez que Page.User.Identity.Name est bien renseigné ? Par ailleurs pour l' égalité dans ce cas un seul = suffit : where="Matricule = @Matricule".

    Sinon quelle erreur vous est renvoyée à l'exécution ?

    Cordialement

     

    mardi 25 mai 2010 10:34
    Modérateur
  • je n'ai aucune erreur mon code fonctionne.

    Pour le where je l'ai fait à l'aide de visual webet donc c'est lui qui a mis les deux =.

    Mon but est de faire la même chose sans passer par une session.

     En gros je veux changer la balise

    <WhereParameters> <asp:SessionParameter Name="Matricule" SessionField="Matricule" type="String" /></WhereParameters>

    pour y intégrer à la place ma variable.

    mardi 25 mai 2010 11:09
  • Vous pouvez affecter la valeur depuis le code behind. Pour cela :

    - ajouter l'événement selecting sur votre LinqDataSource et déclarer un paramètre simple

    <asp:LinqDataSource ID="LinqDataSource1" runat="server" onselecting="LinqDataSource1_Selecting">
     <WhereParameters>
      <asp:Parameter DbType="String" Name="Matricule"/>
     </WhereParameters>
    </asp:LinqDataSource>

    - vous pouvez alors affecter la valeur du paramètre depuis l'évènement Selecting:

    protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
    {
     e.WhereParameters["Matricule"] = Page.User.Identity.Name.ToString();
    }
    
    Cordialement

     

    mardi 25 mai 2010 11:32
    Modérateur

  •  Erreur de compilation
    Description : Une erreur s'est produite lors de la compilation d'une ressource requise pour répondre à cette demande. Veuillez consulter ci-dessous les détails relatifs à l'erreur en question, puis modifier votre code source de manière appropriée.

    Message d'erreur du compilateur: CS1061: 'ASP.secure_site_site_ascx' ne contient pas une définition pour 'LinqDataSource1_Selecting' et aucune méthode d'extension 'LinqDataSource1_Selecting' acceptant un premier argument de type 'ASP.secure_site_site_ascx' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)

    Erreur source:

    Ligne 14 :     </p>
    Ligne 15 : <div style="padding-left: 30px; font-family: 'Agency FB'; color: #888888; font-size: x-large; font-weight: bold;">
    Ligne 16 :              <asp:LinqDataSource ID="LinqDataSource1" runat="server"
    Ligne 17 :                
    Ligne 18 :                 onselecting="LinqDataSource1_Selecting"

    mardi 25 mai 2010 12:20
  • Vous devez ajouter le gestionnaire d'événement sur votre datasource dans le code behind comme indiqué ci dessus:

    protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
    {
       e.WhereParameters["Matricule"] = Page.User.Identity.Name.ToString();
    }
    Si besoin vous pouvez ajouter l'événement en passant par les propriétés de la datasource en mode mode design ( onglet évènement avec l'éclair )

    mardi 25 mai 2010 12:30
    Modérateur
  • dans le code behind j'avais mis cela :

     public partial class secure_site_WebUserControl : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
          
           
        }

        protected void LinqDatasource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
        {
            e.WhereParameters["Matricule"] = Page.User.Identity.Name.ToString();   
        }
    }

    mardi 25 mai 2010 13:00
  • A priori vous utilisez un user control secure_site_site_ascx . Le code behind de ce user control est bien secure_site_WebUserControl ? car par défaut un user control WebUserControl1.ascx aura pour code behind WebUserControl1.ascx.cs

    mardi 25 mai 2010 13:19
    Modérateur
  • oui oui,

    de toute façon je n'avais aucune erreur avant de faire les changements ci-dessus

    mardi 25 mai 2010 13:39
  • Pourtant l'erreur laisse supposer que vous n'avez pas ajouter le code behind dans la bonne classe puisque la méthode LinqDataSource1_Selecting ne peut être trouvée. Avez vous essayé d'ajouter l'évènement en passant en mode design ?
    mardi 25 mai 2010 13:49
    Modérateur
  • cela fonctionne cela venais tout betement de mon linqdatasource2 et non 1 !!!!

    par contre dès que j'enlève les lignes de session :

    <% string variable = Page.User.Identity.Name.ToString(); %>

    <% Session ["Matricule"] = variable; %>

    marche plus. Or c'est se que je veux faire

    • Marqué comme réponse Alex Petrescu vendredi 28 mai 2010 08:46
    mardi 25 mai 2010 14:34
  • Dans votre extrait de code votre datasource s'appelait bien LinqDataSource1 pourtant ... Pouvez vous m'indiquer ce que vous avez désormais dans votre page ?

    Quand vous dites " cela ne marche plus". Ya t-il une erreur ? Que se passe t-il exactement ? POuvez vous ajouter un point d'aret dans la méthode selecting ?

    mardi 25 mai 2010 14:38
    Modérateur
  • voici le code que j'ai :

    <
    asp
    :
    LinqDataSource
     ID
    =
    "LinqDataSource2"
    runat
    =
    "server"
     onselecting
    =
    "LinqDataSource1_Selecting"
    >
    
    
    <
    WhereParameters
    >
    
     <
    asp
    :
    Parameter
     DbType
    =
    "String"
     Name
    =
    "Matricule"
    />
    
     </
    WhereParameters
    >
    
    
    </
    asp
    :
    LinqDataSource
    >
    
    
    

     

    protected
    
    
     void
    
    
     LinqDataSource2_Selecting(object
    
    
     sender, LinqDataSourceSelectEventArgs e)
    {
    e.WhereParameters["Matricule" ] = Page.User.Identity.Name.ToString();
    }

    Maintenant,quand je laisse les lignes de sessions j'ai mon détailsview avec toute les bonnes info dedans (les infos de linkdatasource)

    et quand j'enleve les deux lignes de sessions et ben mon details view est vide.

    je n'ai pas d'erreur générée.

    voila

     

    mardi 25 mai 2010 16:32
  • Il s'agit d'un nouveau datasource LinqDataSource2 ou vous faites les modifications sur le datasource existant ?

    Vérifiez que votre grille est bien associé à LinqDataSource2 ( propriété DataSourceId ) et non pas à l'ancien qui utilise la variable de session

    mardi 25 mai 2010 16:38
    Modérateur