WPF将DataGridTemplateColumn中嵌入的ComboBox绑定到DataTable中
我有一个DataGrid的DataContext设置(在C#代码中)DataTable,以便DataGrid中的每个列绑定到DataTable中的列。在DataGrid的一列中,我想显示一个可编辑的ComboBox,它提供了从MySQL数据库中提取并存储在另一个DataTable中的选项。这个DataTable是使用ObjectDataProvider提供的,并且正在被正确填充(我使用调试器来追踪它)。但问题是DataGrid中的ComboBox仅显示同一列中其他单元格中已存在的DataTable 和中的项目。我怎样才能让ComboBox显示从DataTable中检索到的项目的完整列表?WPF将DataGridTemplateColumn中嵌入的ComboBox绑定到DataTable中
这里是代码的相关位。
,提供了数据表的组合框的ObjectDataProvider的是:
<ObjectDataProvider x:Key="AbodesTable"
ObjectType="{x:Type local:DatabaseTable}"
MethodName="GetTable">
<ObjectDataProvider.MethodParameters>
<s:String>SELECT * FROM abode</s:String>
<s:String>AbodeName</s:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
的DatabaseTable类只是将查询发送到MySQL数据库和填充并返回数据表和工作正常。
数据网格是:
<DataGrid x:Name="baptismDataGrid" Margin="0" Grid.Row="1" AutoGenerateColumns="False"
IsReadOnly="False" ItemsSource="{Binding}" SelectionMode="Single"
RowEditEnding="transcriptDataGrid_RowEditEnding"
KeyUp="transcriptDataGrid_KeyUp">
<DataGrid.Columns>
.....<!-- Other columns -->
<DataGridTemplateColumn x:Name="AbodeColumn" Header="Abode">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Abode}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource AbodesTable} }" IsEditable="True"
Text="{Binding Abode}"
DisplayMemberPath="AbodeName"
SelectedValuePath="AbodeName">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
结合到“精舍”结合在ComboBox到DataTable中精舍列,它是在DataContext DataGrid的文本。 AbodeName是ComboBox绑定到的DataTable中列的名称。
问题是,ComboBox仅包含AbodesTable静态资源中在DataGrid的Abode列的现有单元中找到的项目。 (换言之,在集合术语中,ComboBox包含AbodesTable中的这些元素的交集和DataGrid中Abode列中的一组条目。)我希望ComboBox包含所有 AbodesTable中的项目,无论它们是否已经出现在DataGrid中。
除了这个问题,程序工作正常,因为通过从ComboBox中选择或者只是输入一些文本而进入Abode列的东西被正确绑定到底层的DataTable,所以DataTable可以被写回到MySQL数据库。
感谢您的任何帮助或建议。
我已经在DataTable中将converting the desired column解决为List<string>
并将其用作ComboBox的ItemsSource。上述现在在DataGridTemplateColumn组合框看起来像这样:
<ComboBox ItemsSource="{Binding Source={StaticResource AbodesList}}"
IsEditable="True" Text="{Binding Abode}">
</ComboBox>
所述的StaticResource AbodesList指查询MySQL数据库和转换为List<string>
所需的列的ObjectDataProvider的。