使用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文本。
我的理解是,您希望设置列的值,并根据下拉菜单中的特定选择显示事务类型描述。这个例子展示了在编辑模板中从下拉菜单中选择一个值后,在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] },
};
}
}