Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在用户键入时格式化DataGrid列_C#_Wpf_User Interface_Datagrid - Fatal编程技术网

C# 在用户键入时格式化DataGrid列

C# 在用户键入时格式化DataGrid列,c#,wpf,user-interface,datagrid,C#,Wpf,User Interface,Datagrid,我有一个DataGrid,其中一列上有一个简单的DataGridTextColumn。我想做的是,当用户在DataGrid中的行中键入时,只允许他们输入特定的格式,在本例中为dd/MM/yyyy。我将为他们输入/,然后他们必须键入适合此格式的日期 这是我的DataGridColumn <DataGridTextColumn Header="Date" Width="*"/> 有没有一种方法可以在用户键入时格式化列?没有内置的WPF。但是,您可以使用扩展WPF工具箱中的Maske

我有一个
DataGrid
,其中一列上有一个简单的
DataGridTextColumn
。我想做的是,当用户在
DataGrid
中的行中键入时,只允许他们输入特定的格式,在本例中为
dd/MM/yyyy
。我将为他们输入
/
,然后他们必须键入适合此格式的日期

这是我的
DataGridColumn

<DataGridTextColumn Header="Date" Width="*"/>

有没有一种方法可以在用户键入时格式化

没有内置的WPF。但是,您可以使用扩展WPF工具箱中的
MaskedTextBox
DateTimePicker

我想展示一个来自扩展WPF工具包和
MaskedTextBox
的示例。

更新:

当然,您可以将
DateTimePicker
添加到
DataGrid

首先,下载

然后,在
xmlns
中创建笔名以使用
WPF扩展工具包
库:

<Window
...
xmlns:wpfTool="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
   <vm:MainWindowViewModel/>
</Window.DataContext>
<Grid>        
    <DataGrid ItemsSource="{Binding Persons}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Binding="{Binding IdPerson}"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>                                
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                   <DataTemplate>                           
                            <wpfTool:DateTimePicker Value="{Binding MyDate}"/>
                        </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>                    
            </DataGridTemplateColumn>                
        </DataGrid.Columns>
    </DataGrid>
</Window>
或:

只需使用
WPF扩展工具包中的
MaskedTextBox
Mask=“00-00-0000”
。例如:

<DataGrid ItemsSource="{Binding Persons}" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Header="ID" Binding="{Binding IdPerson}"/>
    <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>                                
    <DataGridTemplateColumn>
       <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>                                 
             <wpfTool:MaskedTextBox Mask="00-00-0000" Text="{Binding CheckDateTime}"/>                           
          </DataTemplate>
       </DataGridTemplateColumn.CellTemplate>                    
     </DataGridTemplateColumn>                
  </DataGrid.Columns>
</DataGrid>


然后通过
DateTime.ParseExact(…)解析
CheckDateTime

数据网格中的编辑很差。我通常建议创建另一个表单来输入信息,然后将第二个表单输入复制到DataGrid中。它可以在DataGrid中使用吗?@CBreeze请随时提问。如果您觉得我的回复对您有帮助,那么您可以将我的回复标记为答案,以简化将来对其他人的搜索。请看这个
<DataGrid ItemsSource="{Binding Persons}" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Header="ID" Binding="{Binding IdPerson}"/>
    <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>                                
    <DataGridTemplateColumn>
       <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>                                 
             <wpfTool:MaskedTextBox Mask="00-00-0000" Text="{Binding CheckDateTime}"/>                           
          </DataTemplate>
       </DataGridTemplateColumn.CellTemplate>                    
     </DataGridTemplateColumn>                
  </DataGrid.Columns>
</DataGrid>