3

ComboBox 列を持つデータグリッドにテーブルをバインドし、別のテーブルにバインドする TwoWay?

テーブルアカウントに双方向バインドされたデータグリッドがあります。更新ボタンがクリックされるたびに、テーブルを更新するデータ アダプターを更新します。それは正常に動作します。

ここで、Accounts テーブルに LocationCode という列があります。LocationCode の値は、別のテーブル Locations から取得されます。そのため、ユーザーがデータグリッドで LocationCode を変更する場合、ユーザーは、テーブル Locations の値のリストから LocationCode を選択できる必要があります。つまり、データグリッドでは、LocationCode 列は、DataContent がテーブル Locations である ComboBox 列である必要があります。

データグリッドにテーブル 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