带有预选值组合框的 DataGridTemplateColumn
DataGridTemplateColumn with combobox with preselected value
我是 WPF 新手,想将组合框绑定到具有 DataGridTemplateColumn 的数据网格。我没有使用 MVVM。
我正在从数据库中读取一个值,并希望将该值显示为模板列中的预选值。不幸的是,我只找到了使用 TextBlock 作为单元格模板的解决方法。
是否也可以直接使用Combobox作为celltemplate,定义预选Item?我没能使用 SelectedItem、SelectedValue、...
我也尝试过使用 datagridcomboboxcolumn,但这对初学者来说太复杂了。
XAML:
<DataGrid x:Name="dataGridComponents" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserAddRows="False" IsReadOnly="False" SelectionUnit="Cell" DataGridCell.Selected="DataGridCell_Selected">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Dropdown column" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding status}" VerticalAlignment="Center" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding status, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Content">
<ComboBoxItem Content="Test" Tag="1" />
<ComboBoxItem Content="Old" Tag="4" />
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
后面的代码:
DataTable mycomponents = m_db.SelectQuery("Select * FROM test WHERE name='test';");
dataGridComponents.ItemsSource = mycomponents.DefaultView;
dataGridComponents.DataContext = mycomponents.DefaultView;
status
指的是 DataTable
中包含当前选定值的列。
您需要使用相同类型的值填充 ComboBox
。例如,如果 status
是一个字符串:
<ComboBox xmlns:sys="clr-namespace:System;assembly=mscorlib"
SelectedItem="{Binding status}">
<sys:String>Test</sys:String>
<sys:String>Old</sys:String>
</ComboBox>
我是 WPF 新手,想将组合框绑定到具有 DataGridTemplateColumn 的数据网格。我没有使用 MVVM。 我正在从数据库中读取一个值,并希望将该值显示为模板列中的预选值。不幸的是,我只找到了使用 TextBlock 作为单元格模板的解决方法。
是否也可以直接使用Combobox作为celltemplate,定义预选Item?我没能使用 SelectedItem、SelectedValue、...
我也尝试过使用 datagridcomboboxcolumn,但这对初学者来说太复杂了。
XAML:
<DataGrid x:Name="dataGridComponents" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserAddRows="False" IsReadOnly="False" SelectionUnit="Cell" DataGridCell.Selected="DataGridCell_Selected">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Dropdown column" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding status}" VerticalAlignment="Center" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding status, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Content">
<ComboBoxItem Content="Test" Tag="1" />
<ComboBoxItem Content="Old" Tag="4" />
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
后面的代码:
DataTable mycomponents = m_db.SelectQuery("Select * FROM test WHERE name='test';");
dataGridComponents.ItemsSource = mycomponents.DefaultView;
dataGridComponents.DataContext = mycomponents.DefaultView;
status
指的是 DataTable
中包含当前选定值的列。
您需要使用相同类型的值填充 ComboBox
。例如,如果 status
是一个字符串:
<ComboBox xmlns:sys="clr-namespace:System;assembly=mscorlib"
SelectedItem="{Binding status}">
<sys:String>Test</sys:String>
<sys:String>Old</sys:String>
</ComboBox>