【发布时间】:2016-06-07 11:31:02
【问题描述】:
我的总体目标是拥有一个 WPF DataGrid,它可以正常显示我的数据,但在编辑时有一个 ComboBox,其中包含该特定列的可能值。
例如,我的 DataGrid 中有以下数据
| Name | Work Date | Clock In | Clock Out | Job | Hours |
|------------------|-------------------------|----------|-----------|--------|-------|
| Edaurdo Gutierez |Friday February 12, 2016 | 1:06 PM | 9:00 PM | Server | 8.00 |
| Rubisel Lozano |Friday February 12, 2016 | 12:55 PM | 8:59 PM | Server | 8.00 |
| Paul Burks |Friday February 12, 2016 | 8:59 AM | 5:30 PM | Chef | 8.50 |
| Roberto Agular |Friday February 12, 2016 | 8:30 AM | 4:10 PM | Chef | 7.75 |
我希望能够双击一个单元格并编辑它的值,但每个列的编辑模板会有所不同。我需要为工作日期、上班、下班和工作执行此操作。
我的“工作日期”列按预期工作,但它更容易,因为它为我填充了 DatePicker。对于 Job 列,我只是得到一个空白的 ComboBox,因为我不知道如何设置它的 ItemsSource。下面是一些使“工作日期”列起作用的代码。
XAML
<UserControl.Resources>
<DataTemplate x:Key="tmpDate">
<TextBlock Text="{Binding Path = Date, StringFormat = '{}{0:dddd MMMM dd, yyyy}'}" />
</DataTemplate>
<DataTemplate x:Key="tmpDateEdit">
<DatePicker SelectedDate="{Binding Path = Date}"/>
</DataTemplate>
</UserControl.Resources>
C#
private void gridTimeSheet_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DataGridColumn col = e.Column;
if (col.Header.ToString() == "Date")
{
DataGridTemplateColumn tmpCol = new DataGridTemplateColumn();
tmpCol.CellTemplate = (DataTemplate)FindResource("tmpDate");
tmpCol.CellEditingTemplate = (DataTemplate)FindResource("tmpDateEdit");
tmpCol.Header = "Date";
e.Column = tmpCol;
}
}
所以我的问题是如何使 Job 列以类似的方式工作,以便当我双击编辑单元格时,会出现一个包含 Jobs 可能值的 ComboBox?我想要填充此 ComboBox 的方式是通过从 SQL 查询创建的 DataTable。
我愿意接受任何建议。也许 DataTemplate 不是我做这些列的最佳选择。任何指导表示赞赏。
谢谢!
【问题讨论】:
标签: c# wpf combobox datagrid datatemplate