WPF - 使用另一个表中的值将DataGridComboBoxColumn绑定到DataSet表字段

时间:2014-11-28 15:52:58

标签: wpf xaml datagrid combobox dataset

我正在尝试将我的C#代码转换为xaml。

有效的c#代码是

        g_DataGrid[TablesManagerDataGrids.DG_Idx.DG_Fixtures].SetBinding(ItemsControl.ItemsSourceProperty, new Binding { Source = g_dataSet.Tables[TABLE_FIXTURES] })

        DataGridComboBoxColumn colPlatform = new DataGridComboBoxColumn();
        colPlatform.Header = COL_FIXTURE_PLATFORM;
        colPlatform.ItemsSource = g_dataSet.Tables[TABLE_PLATFORM].Rows;
        colPlatform.DisplayMemberPath = "[" + COL_PLATFORM_NAME + "]";
        colPlatform.SelectedValuePath = "[" + COL_PLATFORM_IDX + "]";
        Binding temp = new Binding(COL_FIXTURE_PLATFORM);
        colPlatform.SelectedValueBinding = new Binding(COL_FIXTURE_PLATFORM);
        colPlatform.Width = new DataGridLength(1, DataGridLengthUnitType.Star); 

该代码将一个ComboBox列添加到数据网格,以修改表COL_FIXTURE_PLATFORM中的列TABLE_FIXTURES。 ComboBox的值来自列TABLE_PLATFORM中的表COL_PLATFORM_IDX。 ComboBox DropDownList的字符串来自列COL_PLATFORM_NAME中的表TABLE_PLATFORM。

现在我正在尝试将此代码转换为xaml代码,但我对这种语言来说太棒了。 下面的代码是我在一些测试后可以编写的最好的代码,但它不是我之前描述过的。

DataContext设置为我的DataSet.Tables

            this.DataContext = g_Dataset.CurrentDataSet.Tables;

XAML代码是:

    <DataGrid x:Key="DG_Fixtures_Structure" AutoGenerateColumns="false" ItemsSource="{Binding Path=[Fixtures]}" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" 
                            Binding="{Binding Path=Name}"/>
        <DataGridComboBoxColumn Header="Platform" 
                                ItemsSource="{Binding RelativeSource={RelativeSource Findancestor, AncestorType={x:Type Window}}, Path=DataContext[Platform]}"
                                DisplayMemberPath="Name"
                                SelectedValuePath="Index"
                                SelectedValueBinding="{Binding Path=Platforms}"/>
    </DataGrid.Columns>
</DataGrid>

当加载数据网格时,调试器会显示以下错误,并且组合框中没有数据。

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Window', AncestorLevel='1''. BindingExpression:Path=PlacementTarget.DataContext[Platform]; DataItem=null; target element is 'DataGridComboBoxColumn' (HashCode=12880602); target property is 'ItemsSource' (type 'IEnumerable')

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

最后,我找到了一种方法/解决方法,使其工作。 解决方案是在创建类之后在代码中设置ItemsSource。

似乎WPF无法解析分配,因为通过调试,DataGrids中为组合框设置的ItemSource总是为空。