我在自定义控件上确实有一些组合框,如下所示
<Label Grid.Row="12" Grid.Column="0" Name="lblCombobox1">
Select value from Combobox1
</Label>
<ComboBox Grid.Row="12" Grid.Column="1" Name="cbxCombobox1"
SelectionChanged="cbxCostCentre_SelectionChanged" />
<Label Grid.Row="13" Grid.Column="0" Name="lblCombobox2">
Select value from Combobox2</Label>
<ComboBox Grid.Row="13" Grid.Column="1" Name="cbxCombobox2"/>我在主窗口上使用的这个自定义控件如下
<StackPanel Background="LightCyan">
<views:NewAccount HorizontalAlignment="Center"
Margin="30" FontSize="14"/>我需要做填充组合框级联,以使前一个组合框选择的值作为下一个组合框的筛选器参数。看起来下面的代码可以做到这一点。它正在进行过滤,为Combobox2提供一个值列表。但是,我可能遗漏了一些东西,因为带有“where”子句的LINQ查询提供的结果与使用T-SQL运行时不同。它与T-SQL列表非常相似,但在Combobox2中有一些不同于T-SQL列表的值。
using System.Linq;
namespace AccountsSetup.UserControls
{
public partial class NewAccount : UserControl
{
public NewAccount()
{
InitializeComponent();
using (SQL.DBDataContext db = new SQL.DBDataContext())
{
var allCombobox1s = from t in db.Table1
select t.Name;
cbxCombobox1.ItemsSource = allCombobox1s;
}
}
private void cbxCombobox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
using (SQL.DBDataContext dbs = new SQL.DBDataContext())
{
string value = "";
if (cbxCombobox1.SelectedIndex >= 0)
value = cbxCombobox1.SelectionBoxItem.ToString();
var allCombobox2s = (from t in dbs.View1
where t.Combobox1.Contains(value)
select t.Name).Distinct();
cbxCombobox2.ItemsSource = allCombobox2s;
}我确实尝试将Combobox2更改为以下代码。但是,结果是一样的。
<ComboBox Grid.Row="13" Grid.Column="1" x:Name="cbxCombobox2"
ItemsSource="{Binding}" SelectedValue="{Binding ElementName=cbxCombobox1,
Path=SelectedItem.Name, Mode=OneWay}" />请告知在代码中可以做哪些修改。
谢谢
发布于 2017-02-01 18:58:59
您应该将第一个ComboBox的SelectedItem属性值与视图中Name列的值进行比较。
试试这个:
private void cbxCombobox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
using (SQL.DBDataContext dbs = new SQL.DBDataContext())
{
string value = cbxCombobox1.SelectedItem as string;
if (!string.IsNullOrEmpty(value))
{
var allCombobox2s = (from t in dbs.View1
where t.Name != null && t.Name.Contains(value)
select t.Name).Distinct().ToList();
cbxCombobox2.ItemsSource = allCombobox2s;
}
}
}https://stackoverflow.com/questions/41974322
复制相似问题