使用ComboBox加载带有外键的数据网格行

本文关键字:数据 数据网 网格 ComboBox 加载 使用 | 更新日期: 2023-09-27 18:06:18

我试图将一系列行加载到包含其他表的外键的DataGrid中。在这个特定的情况下,行有一个TransactionTypeID (TransactionTypes表的外键),我希望我的ComboBox (ItemsSource是来自事务表的DataView类型)能够正确显示并允许修改。

<DataGridTemplateColumn Header="Transaction Types">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="Need ComboBox SelectedText here!"></TextBlock>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding DataContext.TransactionTypes, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                DisplayMemberPath="Description"
                SelectedValuePath="ID"
                SelectedItem="{Binding TransactionTypeID}"></ComboBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

ComboBox SelectedItem似乎不工作,我不知道如何填充TextBlock文本。

使用ComboBox加载带有外键的数据网格行

我的理解是,您希望设置列的值,并根据下拉菜单中的特定选择显示事务类型描述。这个例子展示了在编辑模板中从下拉菜单中选择一个值后,在textblock中绑定文本。

XAML:

<Grid DataContext="{x:Static local:dc.Instance}">
    <Grid.Resources>
        <DataTemplate x:Key="DisplayTemplate" >
            <TextBlock Text="{Binding TransactionType.Description}"></TextBlock>
        </DataTemplate>
        <DataTemplate x:Key="EditTemplate">
            <ComboBox ItemsSource="{x:Static local:dc.TransactionTypes}"
                DisplayMemberPath="Description"
                SelectedItem="{Binding TransactionType}">
            </ComboBox>
        </DataTemplate>
    </Grid.Resources>
    <DataGrid Name="DG1" ItemsSource="{Binding Path=DGItems}" AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Transaction Type" 
                                    CellTemplate="{StaticResource DisplayTemplate}" 
                                    CellEditingTemplate="{StaticResource EditTemplate}" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

数据上下文类:

public class dc
{
    private static readonly dc _dc = new dc();
    public static dc Instance { get { return _dc;  } }

    public class TransactionTypeItem
    {
        public int ID { get; set; }
        public string Description { get; set; }
    }
    public static List<TransactionTypeItem> TransactionTypes
    {
        get
        {
            return new List<TransactionTypeItem>() { new TransactionTypeItem() { ID = 0, Description = "Zero" },
                                                    new TransactionTypeItem() { ID = 1, Description = "One" },
                                                    new TransactionTypeItem() { ID = 2, Description = "Two" } };
        }
    }
    public class DataItem
    {
        public TransactionTypeItem TransactionType { get; set; }
        public string OtherData { get; set; }
    }

    private List<DataItem> _items;
    public List<DataItem> DGItems
    {
        get
        {
            return _items;
        }
    }


    private dc()
    {
        _items = new List<DataItem>()
        {
            new DataItem() { OtherData = "Test0", TransactionType = TransactionTypes[0] },
            new DataItem() { OtherData = "Test1", TransactionType = TransactionTypes[1] },
            new DataItem() { OtherData = "Test2", TransactionType = TransactionTypes[2] },
        };
    }
}