TwoWay 将表绑定到具有 ComboBox 列的数据网格并绑定到另一个表?
我有一个双向绑定到表帐户的数据网格。每当单击更新按钮时,我都会更新数据适配器,它会更新表。它工作正常。
现在,在 Accounts 表中,有一个名为 LocationCode 的列。LocationCode 的值来自另一个表 Locations。因此,当用户在数据网格中更改 LocationCode 时,用户应该能够从表 Locations 中的值列表中选择 LocationCode。这意味着在数据网格中,LocationCode 列应该是一个 ComboBox 列,其 DataContent 是表 Locations。
有没有办法在数据网格中显示表 Accounts 的值,但是当用户单击 Locations 单元格时,它会显示一个组合框,因此用户可以从组合框中进行选择。值更新后,如果我更新数据适配器,它会自动更新表 Accounts(双向绑定)?
这是我现在正在做的事情:
<DataGrid AutoGenerateColumns="false" Name="dgActLoc" Grid.Row="0" IsReadOnly="false" FontWeight="Bold" Padding="5" Margin="5" ItemsSource="{Binding Path=., Mode=TwoWay}" SelectionMode="Single" FontSize="16" RowDetailsVisibilityMode="VisibleWhenSelected" PreparingCellForEdit="dgActLoc_PreparingCellForEdit">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=AcctLocID, Mode=TwoWay}" Header="Account Location ID" IsReadOnly="True" >
blah, blah
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Path=AccountID, Mode=TwoWay}" Header="Account ID" />
blah, blah
<DataGridComboBoxColumn Header="Location Code" Width="*" SelectedValueBinding="{Binding Path=LocationCode}" SelectedValuePath="LocationCode" DisplayMemberPath="LocationCode" >
</DataGridComboBoxColumn>
</DataGrid>
然后在后面的代码中:
private void dgActLoc_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
if (e.Column.Header.Equals("Location Code"))
{
string cmd = "SELECT LocationCode FROM Location ORDER BY LocationCode";
DataTable dt = clsDataAccess.GetTableFromDB(cmd);
ComboBox cboEditingElement = (ComboBox)(e.EditingElement);
BindingOperations.SetBinding(cboEditingElement, ComboBox.ItemsSourceProperty, new Binding() { Source = dt });
}
}
但是,它有一个问题。当窗口出现时,该列是空白的,即使它应该有一个值(红色圆圈)。
如果我单击单元格,将显示组合框,我可以选择值。如果我单击更新按钮,它会更新表中的值。
所以,我的问题是:为什么它是空白的(在第一个屏幕截图中),如何修复它?
谢谢