选择列表框项目时,在另一个列表框中显示相关数据
When listbox item is selected display related data in another listbox
我正在使用 WPF C# 构建一个应用程序并尝试在列表框中显示值,该列表框显示何时从另一个列表框中选择了一个项目。两个列表框都需要从我的 SQL 数据库中获取数据。
未选择任何内容时的列表框:
选择项目时的工具箱:
这就是我在第一个列表框中显示值的方式(在有人说之前,我知道它容易受到 SQL 注入)。
C#:
public void TradeList() {
DataTable dt = new DataTable();
SqlDataAdapter adpt = new SqlDataAdapter("SELECT DISTINCT Trade from tblTrades", sqlConTwo);
adpt.Fill(dt);
foreach(DataRow dr in dt.Rows) {
Area.Items.Add(dr["Trade"].ToString());
}
}
XAML:
<StackPanel>
<TextBox x:Name="TradesSelected" Width="665" BorderBrush="#FF939393" Padding="2" BorderThickness="1"></TextBox>
<ListBox SelectionMode="Multiple" x:Name="Trade" Width="665" Height="100" BorderBrush="#FF939393" Padding="2" BorderThickness="1 0 1 1" ItemsSource="{Binding Path=Trade}" SelectionChanged="Trade_SelectionChanged" >
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</StackPanel>
<StackPanel Margin="10 0 0 0">
<TextBox x:Name="SkillSelected" Width="665" BorderBrush="#FF939393" Padding="2" BorderThickness="1"></TextBox>
<ListBox SelectionMode="Multiple" x:Name="Skills" Width="665" Height="100" BorderBrush="#FF939393" Padding="2" BorderThickness="1 0 1 1" ItemsSource="{Binding Path=Skills}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</StackPanel>
在我的table里,有技能的那一栏叫做技能。我找到了一种通过硬编码所有行业和技能来做到这一点的方法,但这并不理想,因为我的 table 中有很多行,这将非常耗时。
据我所知,您在 ListBoxs
SelectedItem
中有 2 ObservableCollection
Skills
和 Trade
将获得 select 项目列表框,这样当 Trade_SelectionChanged
发生时你可以获得 selected 技能并填写 Trade
修复了 Trade_SelectionChanged 的问题,修复一直在我眼前..
我正在使用 WPF C# 构建一个应用程序并尝试在列表框中显示值,该列表框显示何时从另一个列表框中选择了一个项目。两个列表框都需要从我的 SQL 数据库中获取数据。
未选择任何内容时的列表框:
选择项目时的工具箱:
这就是我在第一个列表框中显示值的方式(在有人说之前,我知道它容易受到 SQL 注入)。
C#:
public void TradeList() {
DataTable dt = new DataTable();
SqlDataAdapter adpt = new SqlDataAdapter("SELECT DISTINCT Trade from tblTrades", sqlConTwo);
adpt.Fill(dt);
foreach(DataRow dr in dt.Rows) {
Area.Items.Add(dr["Trade"].ToString());
}
}
XAML:
<StackPanel>
<TextBox x:Name="TradesSelected" Width="665" BorderBrush="#FF939393" Padding="2" BorderThickness="1"></TextBox>
<ListBox SelectionMode="Multiple" x:Name="Trade" Width="665" Height="100" BorderBrush="#FF939393" Padding="2" BorderThickness="1 0 1 1" ItemsSource="{Binding Path=Trade}" SelectionChanged="Trade_SelectionChanged" >
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</StackPanel>
<StackPanel Margin="10 0 0 0">
<TextBox x:Name="SkillSelected" Width="665" BorderBrush="#FF939393" Padding="2" BorderThickness="1"></TextBox>
<ListBox SelectionMode="Multiple" x:Name="Skills" Width="665" Height="100" BorderBrush="#FF939393" Padding="2" BorderThickness="1 0 1 1" ItemsSource="{Binding Path=Skills}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</StackPanel>
在我的table里,有技能的那一栏叫做技能。我找到了一种通过硬编码所有行业和技能来做到这一点的方法,但这并不理想,因为我的 table 中有很多行,这将非常耗时。
据我所知,您在 ListBoxs
SelectedItem
中有 2 ObservableCollection
Skills
和 Trade
将获得 select 项目列表框,这样当 Trade_SelectionChanged
发生时你可以获得 selected 技能并填写 Trade
修复了 Trade_SelectionChanged 的问题,修复一直在我眼前..