1

我需要将用户名绑定到 DomainDataSource QueryParameter。我的理解是以下不起作用:

<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>

我不反对使用页面的 C# 代码隐藏部分,但我不确定将其放入什么事件中。

到目前为止,我已经尝试过:

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});
}

但是由于 InitializeComponent() 首先触发并加载数据,这导致 DomainDataSource 因 Query 没有任何参数要运行而被炸毁……它不起作用。

接下来我尝试了这个...

[xml 文件]

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

[cs文件]

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

不幸的是,该事件从未触发。我不确定为什么。

我什至试过这个:[xaml 文件]

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

[cs文件]

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

但这只是愚蠢的。

我不知所措。当页面加载时,如何使用参数加载此查询?

谢谢!

4

2 回答 2

3

嗯,我不是您问题的具体答案,但我可能知道一种完全避免这种情况的方法。

我注意到您有一个名为“GetStockByCompany”的方法,它接受当前登录的用户作为参数...

您可以完全消除对参数的需求,而是在“GetStockByCompany”的服务器端查询中在“Where”部分使用它:

this.ServiceContext.User.Identity.Name

Ex - 获取当前登录用户的所有专辑:

album = this.Context.AlbumSet
            .Where(n => n.AlbumId == AlbumId)
            .Where(n => n.aspnet_Users.UserName == this.ServiceContext.User.Identity.Name)
            .First();
于 2009-11-10T20:39:14.277 回答
0

绑定查询参数有效,典型用法是直接绑定到控件。

要在后面的代码中设置参数,请为参数命名并设置 value 属性。无需在后面的代码中添加整个参数。

于 2013-01-23T17:46:34.000 回答