默认情况下,C#将T-SQL日期数据类型转换为DateTime数据类型

时间:2014-05-31 12:54:22

标签: c# sql sql-server wpf datetime

将表从数据库传输到数据网格(WPF)时,T-SQL中的DATE数据类型将转换为DateTime,但我不希望这样。我只希望.Date部分显示在我的数据网格中。

这是c#中的一段代码:

cmd = new SqlCommand("SELECT * FROM bibliotvguia.get_progtv();", con);

adap = new SqlDataAdapter(cmd);

dt = new DataTable();
adap.Fill(dt);
programs_datagrid.ItemsSource = dt.DefaultView;

和XAML代码:

<DataGrid SelectionMode="Single" Name="programs_datagrid" Height="340"
                      AutoGenerateColumns="False" RowHeaderWidth="0" IsReadOnly="True" CanUserResizeColumns="True"
                      CanUserReorderColumns="False">
                    <DataGrid.Columns >
                        <DataGridTextColumn Header="Canal de TV" Binding="{Binding canal_media}"></DataGridTextColumn>
                        <DataGridTextColumn Header="Dia" Binding="{Binding dia_media}"></DataGridTextColumn>
                        <DataGridTextColumn Header="Hora" Binding="{Binding hora_media}"></DataGridTextColumn>
                        <DataGridTextColumn Header="Produção Audiovisual" Binding="{Binding titulo}"></DataGridTextColumn>
                    </DataGrid.Columns>
                </DataGrid>

dia_media列是DateTime类型的列。

感谢您的帮助。

最适合你。

2 个答案:

答案 0 :(得分:4)

NET中只有DateTime类型,所以你不能真正拥有只有Date部分的变量。不应解决此类问题,更改日期时间值的存储或插入复杂的SQL函数以将值提取为字符串或删除时间部分。

这只是关于如何格式化数据以进行演示的问题。

我想你在XAML中需要这样的东西

  <DataGridTextColumn Header="Dia" Binding="{Binding dia_media, 
                                 StringFormat=dd MM yyyy}"/>

答案 1 :(得分:-1)

您可以在绑定中使用转换器

XAML

       <Window.Resources>
         <locl:DateTimeConverter x:Key="converter"/>
       </Window.Resources>
     ...
        <DataGrid ItemsSource="{Binding Dates}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Date" 
                                    Binding="{ Binding DateProperty,
                                               Converter={ StaticResource converter}}"/>
            </DataGrid.Columns>
        </DataGrid>

转换器类:

 public class DateTimeConverter:IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            DateTime dateValue = (DateTime)value;

            return dateValue.ToString("yyyy/MM/dd/");
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

结果:

enter image description here

我希望它有所帮助