具有不同数据源的组合框的 C# WPF 数据网格模板列
C# WPF datagrid template column with combobox having different datasource
(cmbUnit)
,另一个是 DataGrid (dgvProducts)
cmbUnits
与 List<Unit>
集合绑定并且 Unit
class 在
public class Unit
{
public int ID { get; set; }
public string Name { get; set; }
}
注意:显示成员是名称&值成员是ID
其中,dgvProducts
与 List<Product>
集合绑定,Product
class 在下方
public class Product
{
public int ID { get; set; }
public string ProductName { get; set; }
public int UnitID { get; set; }
}
在这里,我从我的数据库table (TBL_PRODUCTS)
中选择UnitID
,我也可以通过加入table来检索UnitName
。现在,我只想在 Product
class.
UnitID
我的问题是,我的数据网格有一个列 (datagridTemplateColumn)
,其中有一个组合框作为子项,我想通过像我的组合框一样传递 UnitID
来显示其中的 UnitName
控制 (cmbUnit)
我在数据网格中的数据应该是
--------------------------------------------------
ID UnitName ProductName
--------------------------------------------------
12345 Kg Sample Product
其中 Kg
应显示在组合框内。
如何做到这一点?帮帮我!
我 cmbUnit
的 XAML 代码是
<ComboBox Grid.Column="7" Grid.Row="1" Name="cmbUnit" ></ComboBox>
我从后面的代码将数据绑定到这个控件。
XAML 对于 dgvProducts
<DataGrid AutoGenerateColumns="False" Grid.ColumnSpan="2"
Name="dgvProduct"
Grid.Row="2">
<DataGrid.Columns>
<DataGridTemplateColumn Header="ID" Width="50" CanUserSort="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label VerticalContentAlignment="Center" Content="{Binding ID}"></Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Unit" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox IsEnabled="False"
Name="cmbGrUnit"
ItemsSource="{Binding Units}"
DisplayMemberPath="Name"
SelectedValuePath="ID"
SelectedValue="{Binding UnitID}"
></ComboBox>
<!--<Label VerticalContentAlignment="Center" Content="{Binding Name}"></Label>-->
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Product Name" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label VerticalContentAlignment="Center" Content="{Binding ProductName}"></Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn></DataGrid.Columns>
谢谢
当你有
<ComboBox Grid.Column="7" Grid.Row="1" Name="cmbUnit" ></ComboBox>
从后面的代码中设置 ItemsSource
cmbUnit.ItemsSource = this.Units
然后您可以通过以下方式使用此 cmbUnit 作为绑定的源对象:
<DataGridTemplateColumn Header="Unit" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=ItemsSource, ElementName=cmbUnit}"
SelectedValuePath="ID" DisplayMemberPath="Name" SelectedValue="{Binding Path=UnitID}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
请注意,DataGrid 中的 ComboBox 有自己的 DataContext,其中包含 DataGrid 的 ItemsSource 的一个元素。此外,它是 DataTemplate 的一部分,这意味着它本身不是一个对象,因此您不能从后面的代码直接绑定到它。