DataGridComboBoxColumn 绑定到与 DataGrid ItemsSource 不同的列表
DataGridComboBoxColumn binding to a different list that the DataGrid ItemsSource
所以我是 WPF 的新手,有人向我提到的一个很好的功能是数据网格中的自定义列。
所以这是我的问题。
我有两个数据库 table,一个员工 table 和一个职业 table。
员工table
职业table
如您所见,我有一个外键链接两个 table。所以在我的应用程序中,我设置了我的 DataGrid ItemsSource = 员工列表。在我的 DataGrid 中,我自己定义了列,我禁用了 AutoGenerateColumns 属性。我有 4 列,
0: 文本列
1: 文本列
2:文本列
3:组合框列
所以我的问题是,如何将 ComboBoxColumn(第 4 列)的 ItemsSource 设置为我的职业列表 class,显示来自外键 OccupationID 的职业描述?并用所有职业描述填充组合框?
我的代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
List<Employee> employees;
private void gridMain_Loaded(object sender, RoutedEventArgs e)
{
employees = EmployeeDataHandler.getAllEmployees();
List<Occupation> occs = OccupationDataHandler.getAllJobs();
dgEmployee.ItemsSource = employees;
}
}
class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public int Occupation { get; set; }
}
class Occupation
{
public int ID { get; set; }
public string Description { get; set; }
}
还有我的 xaml 代码:
<Grid x:Name="gridMain" Loaded="gridMain_Loaded">
<DataGrid x:Name="dgEmployee" HorizontalAlignment="Left" Height="301" Margin="10,10,0,0" VerticalAlignment="Top" Width="498" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ID}" ClipboardContentBinding="{x:Null}" Header="System ID"/>
<DataGridTextColumn Binding="{Binding Name}" ClipboardContentBinding="{x:Null}" Header="Name"/>
<DataGridTextColumn Binding="{Binding Surname}" ClipboardContentBinding="{x:Null}" Header="Surname"/>
<DataGridComboBoxColumn ClipboardContentBinding="{x:Null}" Header="Occupation" SelectedValueBinding="{x:Null}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
非常感谢您花时间阅读我的问题。 P.S。这都是假数据所以不要担心截图中的名字
在你的 XAML 标记中给 DataGridComboBoxColumn
元素一个 x:Key
,然后在你的事件处理程序中设置它的 ItemsSource
属性:
private void gridMain_Loaded(object sender, RoutedEventArgs e)
{
employees = EmployeeDataHandler.getAllEmployees();
List<Occupation> occs = OccupationDataHandler.getAllJobs();
dgEmployee.ItemsSource = employees;
cmb.ItemsSource = occs;
}
XAML:
<DataGridComboBoxColumn x:Name="cmb" ClipboardContentBinding="{x:Null}"
Header="Occupation"
SelectedValuePath="ID"
SelectedValueBinding="{Binding Occupation}"
DisplayMemberPath="Description "/>
所以我是 WPF 的新手,有人向我提到的一个很好的功能是数据网格中的自定义列。 所以这是我的问题。
我有两个数据库 table,一个员工 table 和一个职业 table。
员工table
职业table
如您所见,我有一个外键链接两个 table。所以在我的应用程序中,我设置了我的 DataGrid ItemsSource = 员工列表。在我的 DataGrid 中,我自己定义了列,我禁用了 AutoGenerateColumns 属性。我有 4 列,
0: 文本列
1: 文本列
2:文本列
3:组合框列
所以我的问题是,如何将 ComboBoxColumn(第 4 列)的 ItemsSource 设置为我的职业列表 class,显示来自外键 OccupationID 的职业描述?并用所有职业描述填充组合框?
我的代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
List<Employee> employees;
private void gridMain_Loaded(object sender, RoutedEventArgs e)
{
employees = EmployeeDataHandler.getAllEmployees();
List<Occupation> occs = OccupationDataHandler.getAllJobs();
dgEmployee.ItemsSource = employees;
}
}
class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public int Occupation { get; set; }
}
class Occupation
{
public int ID { get; set; }
public string Description { get; set; }
}
还有我的 xaml 代码:
<Grid x:Name="gridMain" Loaded="gridMain_Loaded">
<DataGrid x:Name="dgEmployee" HorizontalAlignment="Left" Height="301" Margin="10,10,0,0" VerticalAlignment="Top" Width="498" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ID}" ClipboardContentBinding="{x:Null}" Header="System ID"/>
<DataGridTextColumn Binding="{Binding Name}" ClipboardContentBinding="{x:Null}" Header="Name"/>
<DataGridTextColumn Binding="{Binding Surname}" ClipboardContentBinding="{x:Null}" Header="Surname"/>
<DataGridComboBoxColumn ClipboardContentBinding="{x:Null}" Header="Occupation" SelectedValueBinding="{x:Null}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
非常感谢您花时间阅读我的问题。 P.S。这都是假数据所以不要担心截图中的名字
在你的 XAML 标记中给 DataGridComboBoxColumn
元素一个 x:Key
,然后在你的事件处理程序中设置它的 ItemsSource
属性:
private void gridMain_Loaded(object sender, RoutedEventArgs e)
{
employees = EmployeeDataHandler.getAllEmployees();
List<Occupation> occs = OccupationDataHandler.getAllJobs();
dgEmployee.ItemsSource = employees;
cmb.ItemsSource = occs;
}
XAML:
<DataGridComboBoxColumn x:Name="cmb" ClipboardContentBinding="{x:Null}"
Header="Occupation"
SelectedValuePath="ID"
SelectedValueBinding="{Binding Occupation}"
DisplayMemberPath="Description "/>