2009-11-10 16 views
1

Je dois lier un nom d'utilisateur à un QueryParameter DomainDataSource. Je crois comprendre que ce qui suit ne fonctionne pas:Liaison de données à un paramètre de requête DomainDataSource

<RiaControls:DomainDataSource x:Name="MyData" LoadSize="20" QueryName="GetStockByCompany" AutoLoad="True"> 

    <RiaControls:DomainDataSource.DomainContext> 
     <ds:InventoryDomainContext /> 
    </RiaControls:DomainDataSource.DomainContext> 

    <RiaControls:DomainDataSource.QueryParameters> 
     <riadata:Parameter 
      ParameterName="userName" 
      Value="{Binding Path=User.Name}" /> 
    </RiaControls:DomainDataSource.QueryParameters> 

</RiaControls:DomainDataSource> 

Je ne suis pas opposé à l'utilisation du code-behind C# partie de la page, mais je ne suis pas sûr de ce événement pour mettre cela en

. jusqu'à présent, je l'ai essayé ceci:

public Inventory() 
{ 
    InitializeComponent(); 
    Loaded += Inventory_Loaded; 
} 
private void Inventory_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.MyData.QueryParameters.Add(new Parameter { ParameterName = "userID", Value = RiaContext.Current.User.Name}); 
} 

Mais depuis InitializeComponent() se déclenche en premier lieu, et Loades les données, ce qui provoque la DomainDataSource à la bombe due à la requête de ne pas avoir de paramètres à courir ... il n » ai pas t travail.

Ensuite, j'essayé cette ...

[fichier XAML]

<RiaControls:DomainDataSource x:Name="MyData" LoadSize="20" QueryName="GetStockByCompany" AutoLoad="True" LoadingData="MyData_LoadingData"> 

[fichier cs]

private void MyData_LoadingData(object sender, LoadingDataEventArgs e) 
{ 
    this.MyData.QueryParameters.Add(new Parameter { ParameterName = "userID", Value = RiaContext.Current.User.Name}); 
} 

Malheureusement, l'événement n'a jamais tiré. Je ne suis pas sûr pourquoi.

J'ai même essayé ceci: [fichier XAML]

<RiaControls:DomainDataSource x:Name="MyData" LoadSize="20" QueryName="GetStockByCompany" AutoLoad="True" LoadedData="MyData_LoadedData"> 

[fichier cs]

private void MyData_LoadedData(object sender, LoadedDataEventArgs e) 
{ 
    this.MyData.QueryParameters.Add(new Parameter { ParameterName = "userID", Value = RiaContext.Current.User.Name}); 
} 

Mais c'était tout simplement stupide.

Je suis à perte. Comment charger cette requête, avec le paramètre, au chargement de la page?

Merci!

Répondre

3

Hmmm Je ne suis pas une réponse spécifique à votre problème mais je peux savoir un moyen d'éviter complètement la situation.

Je remarqué que vous avez une méthode nommée « GetStockByCompany » qui acceptent l'utilisateur actuellement connecté comme paramètre ...

Vous pouvez supprimer complètement la nécessité pour le paramètre et la place sur votre requête côté serveur pour « GetStockByCompany "utiliser dans votre "Où" partie:

this.ServiceContext.User.Identity.Name

Ex - Obtenir tous les albums pour l'utilisateur actuellement connecté:

album = this.Context.AlbumSet 
      .Where(n => n.AlbumId == AlbumId) 
      .Where(n => n.aspnet_Users.UserName == this.ServiceContext.User.Identity.Name) 
      .First(); 
+0

Brillant! Vous êtes un génie. Merci une tonne !!! – Joe

0

La liaison du paramètre de requête fonctionne, l'utilisation typique est que vous le liez directement aux contrôles.

Pour définir le paramètre dans le code, donnez un nom au paramètre et définissez la propriété value. Il n'est pas nécessaire d'ajouter le paramètre entier dans le code derrière.