C# 如何以编程方式将DataGrid列设置为DatePicker输入
有一些文章解释了如何在DataGrid或中创建特定列,但它们都是通过XAML实现的。这样做:C# 如何以编程方式将DataGrid列设置为DatePicker输入,c#,wpf,datagrid,datatable,datepicker,C#,Wpf,Datagrid,Datatable,Datepicker,有一些文章解释了如何在DataGrid或中创建特定列,但它们都是通过XAML实现的。这样做: <DataGrid AutoGenerateColumns="True"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Name}" /> <DataGridTemplateColumn>
<DataGrid AutoGenerateColumns="True">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding Date}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<DataGrid RowEditEnding="updateDatabase" ItemsSource="{Binding}" AutoGenerateColumns="True">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Visibility" Value="{Binding Visibility}" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
dataTable.Rows[0][15] = new DateTime(1991, 9, 2);
对于我的XAML,如下所示:
<DataGrid AutoGenerateColumns="True">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding Date}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<DataGrid RowEditEnding="updateDatabase" ItemsSource="{Binding}" AutoGenerateColumns="True">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Visibility" Value="{Binding Visibility}" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
dataTable.Rows[0][15] = new DateTime(1991, 9, 2);
或
但是这些只是作为单元格中的日期字符串结束,而不是日期选择器输入类型?有没有办法做到这一点?比如说
dataTable.Columns[13].DataType.Equals(typeof(DatePicker));
dataTable.Columns[13].DataType.Equals(typeof(DatePickerTextBox));
提前谢谢
编辑:
如果我可以通过XAML部分实现,也没关系。例如,如果我制作我的XMAL:
<DataGrid RowEditEnding="updateDatabase" Name="taskTable" ItemsSource="{Binding}" AutoGenerateColumns="True" HorizontalAlignment="Left" Margin="25,50,25,25" VerticalAlignment="Top" Grid.IsSharedSizeScope="True" SelectionChanged="DataGrid_SelectionChanged_1">
<!-- VirtualizingStackPanel.IsVirtualizing="False" -->
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Visibility" Value="{Binding Visibility}" />
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Header="dates">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding dates}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我加载的DataTable中的dates列类似于taskTable.DataContext=DataTable.DefaultView;我是否可以让dates列与C中DataTable中的数据在dates下与XAML中的模板保持一致
在本例中,由于标题相同,如果我在左栏中选择一个日期,一旦我按enter键,它将进入右侧的dates栏并被保存,这很好。我只是希望他们是同一个专栏
有什么想法吗
如果您不必自动生成列,有很多解决方案,但我必须允许动态添加和删除列,因此没有办法解决 以下是有效的方法: C 内部公共部分类主窗口:窗口 外部公共部分类主窗口:窗口 克马尔 对于datatemplate:
<Window.Resources>
<ResourceDictionary>
<DataTemplate x:Key="datePickerTemplate">
<DatePicker Text="{Binding}"
></DatePicker>
</DataTemplate>
</ResourceDictionary>
</Window.Resources>
这是我对datagrid的XMAL
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="True"
AutoGeneratingColumn="addColumnTemplates">
</DataGrid>
如果您不必自动生成列,有很多解决方案,但我必须允许动态添加和删除列,因此没有办法解决 以下是有效的方法: C 内部公共部分类主窗口:窗口 外部公共部分类主窗口:窗口 克马尔 对于datatemplate:
<Window.Resources>
<ResourceDictionary>
<DataTemplate x:Key="datePickerTemplate">
<DatePicker Text="{Binding}"
></DatePicker>
</DataTemplate>
</ResourceDictionary>
</Window.Resources>
这是我对datagrid的XMAL
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="True"
AutoGeneratingColumn="addColumnTemplates">
</DataGrid>
我可能听起来很愚蠢。。。但你为什么要这么做。MVVM存在的原因是,您不会弄乱代码背后的UI元素。@user853710别担心,我尝试它可能很愚蠢。因为datatable是在代码中加载的,所以我不认为有一种使用XAML的方法可以做到这一点,但我可能错了。在构建项目之前,XAML被翻译成C。但这不是处理任何问题的好方法。好的,所以我可以在从数据库加载其余列之前将上面的DataGridTemplateColumn放入datagrid中,如何使该模板应用于按名称加载的特定列?我可能听起来很愚蠢。。。但你为什么要这么做。MVVM存在的原因是,您不会弄乱代码背后的UI元素。@user853710别担心,我尝试它可能很愚蠢。因为datatable是在代码中加载的,所以我不认为有一种使用XAML的方法可以做到这一点,但我可能错了。在构建项目之前,XAML被翻译成C。但这不是处理任何问题的好方法。好的,在从数据库加载其余列之前,我可以将上面的DataGridTemplateColumn放入datagrid中,如何使该模板应用于按名称加载的特定列?