如何根据另一个组合框过滤组合框?... 再次 :)
我正在编写一个网络应用程序来学习。我使用 Visual Studio 2012、Silverlight 5、C# 和 SQl Server 作为数据源。
我有一个表加载到数据网格和组合框来过滤数据网格。到目前为止,一切正常。
组合框是“FilterState”和“FilterWaterWay”。请注意,它们不在数据网格中。
我想选择一个州并仅使用该州的那些水道重新填充 FilterWaterWay。
我见过很多方法可以做到这一点,但似乎没有一个与我的设置相匹配。我可能是错的,只是不知道。
从学习的角度来看,我想知道如何在以下所有 3 个查询数据示例中实现这一点,但我只会满足于一个。最后一个是我最喜欢的。
感谢您的任何帮助。
我不介意使用以下内容加载组合框,无论是否过滤,但我不知道如何
- 将 GetQuery 限制为仅一个字段
- 使该字段与众不同
这会将所有数据从 GetQuery 加载到数据网格。
LoadOperation<MASTER_DOCKS> loadOp = this._DocksContext.Load(this._DocksContext.GetMASTER_DOCKSQuery());
DocksGrid.ItemsSource = loadOp.Entities;
这会在过滤后将所有数据从 GetQuery 加载到数据网格
EntityQuery<MASTER_DOCKS> query = _DocksContext.GetMASTER_DOCKSQuery();
query = query.Where(s => s.WTWY_NAME == WaterwaytoFilterBy && s.STATE == StateToFilterBy);
LoadOperation<MASTER_DOCKS> loadOp = this._DocksContext.Load(query);
DocksGrid.ItemsSource = loadOp.Entities;
这就是我当前加载组合框的方式。这适用于负载,但我不知道如何过滤。DomainService.cs 不知道我想用作此组合框 (FilterWaterway) 的过滤器的其他组合框 (FilterState)。
如果我可以在 xaml 中查询 ObservableCollection,我也许可以让它工作,但它看起来有点笨重。
改编自http://www.jonathanwax.com/2010/10/wcf-ria-services-datagrid-filters-no-domaindatasource-2/
XAML =
private ObservableCollection<string> waterWayFilterList;
public ObservableCollection<string> WaterWayFilterList
{
get { return waterWayFilterList; }
set { waterWayFilterList = value; }
}
private void DoPopulateFilter()
{
//Call Invoke Method to get a list of distinct WaterWays
InvokeOperation<IEnumerable<string>> invokeOp = _DocksContext.FillWaterWayList();
invokeOp.Completed += (s, e) =>
{
if (invokeOp.HasError)
{
MessageBox.Show("Failed to Load Category Filter");
}
else
{
//Populate Filter DataSource
WaterWayFilterList = new ObservableCollection<string>(invokeOp.Value);
//Add a Default "[Select]" value
WaterWayFilterList.Insert(0, "[Select WaterWay]");
FilterWaterWay.ItemsSource = WaterWayFilterList;
FilterWaterWay.SelectedItem = "[Select WaterWay]";
}
};
}
域服务.cs =
[Invoke]
public List<string> FillWaterWayList()
{
return (from r in ObjectContext.MASTER_DOCKS
select r.WTWY_NAME).Distinct().ToList();
}
这是迄今为止我得到的最接近的,而且看起来很简单。
它不返回错误,但显示的结果为 System.Collections.Generic.List'1[System.Char]
下拉列表中的记录数是正确的,这让我认为它在正确的轨道上。只有显示的内容是错误的。可能是选角问题?
我仍然需要从“TX”所在的 FilterState 组合框中获取结果。
var filter = from r in _DocksContext.MASTER_DOCKS
where r.STATE.Equals("TX")
select r.WTWY_NAME.Distinct().ToList();
MyComboBox.ItemsSource = filter;