WPF将DataGridTemplateColumn中嵌入的ComboBox绑定到DataTable中

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的。