一般数据库分主表和辅助表,主表的某个字段ID指向辅助表的ID,页面显示的是辅助表的另一个有意义的字段,供用户选择,在主表中存放辅助表的ID,ID由程序内部使用,不向用户显示,根据情况辅助表也可能由用户修改,多数情况由程序员设定。根据这种情况,wpf 窗体中ComboBox控件的数据绑定分两个方面:一是ItemsSource的绑定,二是SelectedValue的绑定,当然还要指定DisplayMemberPath和SelectedValuePath。
首先是DataSet项目的添加,并把所有用到的表添加在上面。
其次是编辑WINDOW窗体,完成版面初步设计(控件的大致位置)后,需要进行“生成”操作,才能添加数据源中的控件。
第三,在“设计”版面从数据源中添加辅助表的某个字段控件,然后删除它们。这步操作的意义是:为Window.Resources添加CollectionViewSource视图和在Loaded="Loaded_data"的指定程序中进行辅助表的数据载入(Fill()),这些程序是自动生成的,删除了控件,但这些程序还是保留下来。
第四,主表中需要用到ComboBox控件的字段,先要设置使用“ComboBox控件”,然后拖放控件到窗体合适位置。这时在XAML界面生成如下代码:
<Grid x:Name="grid1" HorizontalAlignment="Left" Margin="0,17,0,-5" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Content="ID:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="0" VerticalAlignment="Center"/>
<ComboBox x:Name="IDComboBox" Grid.Column="1" DisplayMemberPath="ID" HorizontalAlignment="Left" Height="Auto" ItemsSource="{Binding}" Margin="3" Grid.Row="0" VerticalAlignment="Center" Width="120">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
</Grid>
第五,修改ItemsSource绑定。选定这个“ComboBox控件”,在“属性”窗格中,设置ItemsSource的绑定,方法是点击ItemsSource属性右边的小方格(Binding),选择菜单中的“创建数据绑定”,然后的“绑定类型”选择最下面的“StaticResource”,然后在下面选择相应的CollectionViewSource视图,点击“确定”。这时,XAML代码相应的绑定改为:
ItemsSource="{Binding Mode=OneWay, Source={StaticResource XXXXViewSource}}"
第六,修改SelectedValue的绑定和DisplayMemberPath和SelectedValuePath:
<ComboBox x:Name="IDComboBox" DisplayMemberPath="AAAA"(注:显示字段名称) SelectedValuePath="ID" SelectedValue="{Binding ID}" ItemsSource="{Binding Mode=OneWay, Source={StaticResource XXXXViewSource}}">
绑定就这样OK了。其他修改:上面的Label的Content改为有意义的名称;修改版面设计。