3

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 });

    }
}

但是,它有一个问题。当窗口出现时,该列是空白的,即使它应该有一个值(红色圆圈)。

在此处输入图像描述

如果我单击单元格,将显示组合框,我可以选择值。如果我单击更新按钮,它会更新表中的值。

在此处输入图像描述

所以,我的问题是:为什么它是空白的(在第一个屏幕截图中),如何修复它?

谢谢

4

0 回答 0