WPF 使用 id 从数据库表中绑定 DataGrid 列 ComboBox
Posted
技术标签:
【中文标题】WPF 使用 id 从数据库表中绑定 DataGrid 列 ComboBox【英文标题】:WPF bind DataGrid column ComboBox from database table using id 【发布时间】:2019-04-15 17:36:37 【问题描述】:我有课
[Table(Name = "Categories")]
class Category
[Column(Name = "CategoryID", IsPrimaryKey = true, IsDbGenerated = true)]
private int CategoryID get; set;
[Column(Name = "Name")]
public string Name get; set;
[Table(Name = "Products")]
class Product
[Column(Name = "ProductID", IsPrimaryKey = true, IsDbGenerated = true)]
public int ProductID get; set;
[Column(Name = "CategoryID")]
public int CategoryID get; set;
[Column(Name = "Name")]
public string Name get; set;
[Column(Name = "Price")]
public double Price get; set;
我需要使用 Products 中的 CategoryID 将 DataGrid 列创建为 ComboBox,并将所有类别从 Categories 中的 ComboBox 中进行编辑,我如何使用 DataContext 来制作它
【问题讨论】:
【参考方案1】:在这里,我在窗口级别创建了名称为 ProductSet
和 ListOfCategory
的产品和类别的 ObservableCollection
。
public ObservableCollection<Category> ListOfCategory get; set;
public ObservableCollection<Product> ProductSet get; set;
我在窗口后面的代码中创建了ObservableCollection
,您可以在视图模型中创建它,这是更好的方法。
我已将窗口命名为“Window1”x:Name="Window1"
由于您需要绑定数据上下文,所以将elementBinding
与Window1 一起设置,并设置ItemsSource="Binding ProductSet"
。所以这里发生的是ProuctSet
被搜索DataContext
,然后在Window1
类中搜索。
对于DataGridComboBoxColumn
,使用样式设置ItemsSource
,并使用相对源搜索具有ListOfCategory
的Datagrid
DataContext
。
<DataGrid AutoGenerateColumns="False" x:Name="DataGrid1"
HorizontalAlignment="Left" Height="135" Margin="21,288,0,0"
VerticalAlignment="Top" Width="729"
DataContext="Binding ElementName=Window1"
ItemsSource="Binding ProductSet" >
<DataGrid.Columns>
<DataGridTextColumn Header="ProductID" Width="175"
Binding="Binding ProductID"/>
<DataGridComboBoxColumn Header="Category"
DisplayMemberPath="Name" SelectedValuePath="CategoryID"
SelectedItemBinding="Binding ListOfCategory">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource"
Value="Binding Path=DataContext.ListOfCategory,
RelativeSource=RelativeSource FindAncestor,
AncestorType=x:Type DataGrid"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="Binding
Path=DataContext.ListOfCategory,RelativeSource=
RelativeSource FindAncestor,
AncestorType=x:Type DataGrid"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Header="Name" Width="175" Binding="Binding Name"/>
<DataGridTextColumn Header="Price " Width="175"
Binding="Binding Price "/>
</DataGrid.Columns>
</DataGrid>
如果您要使用 View 模型进行绑定,则提供 Viewmodel
的类名称而不是元素绑定。
【讨论】:
以上是关于WPF 使用 id 从数据库表中绑定 DataGrid 列 ComboBox的主要内容,如果未能解决你的问题,请参考以下文章