我需要将用户名绑定到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因查询没有任何参数运行而轰炸...它不起作用。
接下来我尝试了这个......
[xaml档案]
<RiaControls:DomainDataSource x:Name="MyData" LoadSize="20" QueryName="GetStockByCompany" AutoLoad="True" LoadingData="MyData_LoadingData">
[cs file]
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 file]
private void MyData_LoadedData(object sender, LoadedDataEventArgs e)
{
this.MyData.QueryParameters.Add(new Parameter { ParameterName = "userID", Value = RiaContext.Current.User.Name});
}
但那只是愚蠢。
我很茫然。如何在页面加载时使用参数加载此查询?
谢谢!
答案 0 :(得分: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();
答案 1 :(得分:0)
绑定查询参数有效,典型用法是将其直接绑定到控件。
要在代码后面设置参数,请为参数指定名称并设置value属性。没有必要在代码中添加整个参数。