当我从MySql导入日期值时,DataGrid显示DateTime

当我从MySql导入日期值时,DataGrid显示DateTime,mysql,wpf,datagrid,Mysql,Wpf,Datagrid,在我的WPF应用程序中,我有一个DataGrid,它显示MySql数据库中的一个表,列的类型是DATE,但当我填充DataGrid时,它会显示DateTime(表中的值和12:00:00) XAML <UserControl x:Class="Projet.Recources0.Etudiant.Interne.Ajouter" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

在我的WPF应用程序中,我有一个DataGrid,它显示MySql数据库中的一个表,列的类型是DATE,但当我填充DataGrid时,它会显示DateTime(表中的值和12:00:00)

XAML

<UserControl x:Class="Projet.Recources0.Etudiant.Interne.Ajouter"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:mui="http://firstfloorsoftware.com/ModernUI"
         xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
         mc:Ignorable="d" 
         d:DesignHeight="500" d:DesignWidth="1000">
    <Grid>
        <TextBox x:Name="Matricule" controls:TextBoxHelper.Watermark="Matricule" controls:TextBoxHelper.ClearTextButton="True" HorizontalAlignment="Left" Height="23" Margin="25,71,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="225"/>
        <TextBox x:Name="Nom" controls:TextBoxHelper.Watermark="Nom" controls:TextBoxHelper.ClearTextButton="True" HorizontalAlignment="Left" Height="23" Margin="25,102,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="225"/>
        <TextBox x:Name="Prenom" controls:TextBoxHelper.Watermark="Prenom" controls:TextBoxHelper.ClearTextButton="True" HorizontalAlignment="Left" Height="23" Margin="25,133,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="225"/>
        <TextBox x:Name="E_mail" controls:TextBoxHelper.Watermark="E-mail" controls:TextBoxHelper.ClearTextButton="True" HorizontalAlignment="Left" Height="23" Margin="25,164,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="225"/>
        <ComboBox x:Name="Sex" controls:TextBoxHelper.Watermark="Sexe" HorizontalAlignment="Left" Margin="25,195,0,0" VerticalAlignment="Top" Width="225"/>
        <DatePicker x:Name="D_N" HorizontalAlignment="Left" Margin="25,226,0,0" VerticalAlignment="Top" Width="100" Height="27"/>
        <TextBox x:Name="L_N" controls:TextBoxHelper.Watermark="Lieux de Naissance" controls:TextBoxHelper.ClearTextButton="True" HorizontalAlignment="Left" Height="23" Margin="130,228,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <TextBox x:Name="Addrs" controls:TextBoxHelper.Watermark="Addresse" controls:TextBoxHelper.ClearTextButton="True" HorizontalAlignment="Left" Height="23" Margin="25,259,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="225"/>
        <controls:NumericUpDown x:Name="Consiel" Minimum="0" Maximum="20" Interval="1" Margin="25,290,750,174"/>
        <controls:NumericUpDown x:Name="Redouble" Minimum="0" Maximum="20" Interval="1" Margin="25,331,750,133"/>
        <Button x:Name="Ajouter_Interne" Content="Ajouter" HorizontalAlignment="Left" Margin="172,400,0,0" VerticalAlignment="Top" Width="93" Click="Ajouter_Interne_Click" />
        <DataGrid x:Name="Interne" IsReadOnly="True" AutoGenerateColumns="True" CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserResizeRows="False" CanUserSortColumns="True" HorizontalAlignment="Left" Margin="288,48,0,0" VerticalAlignment="Top" Height="345" Width="652"/>
    </Grid>
</UserControl>
从表中输出

private void Ajouter_Interne_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(Code);
        String in_Mat = Matricule.Text;
        String in_nom = Nom.Text;
        String in_prenom = Prenom.Text;
        String in_email = E_mail.Text;
        String Sexe = "";
        if (Sex.Text == "Homme")
            Sexe = "H";
        else if (Sex.Text == "Femme")
            Sexe = "F";
        String in_date = D_N.SelectedDate.Value.ToString("yyyyMMdd");
        String in_Lieux = L_N.Text;
        String in_Adrs = Addrs.Text;
        int in_Redouble = (int)Redouble.Value;
        int in_Consiel = (int)Consiel.Value;
        String CPI_Code = Code;
        String UserName = in_Mat;
        String Password = RandomString(10);
        MySqlConnection connection = new MySqlConnection(cnx_string);
        connection.Open();
        string newcon_sql = "INSERT INTO `gestion_concour`.`interne` (`Matricule`, `Nom`, `Prenom`, `E_mail`, `Sexe`, `Date_Naissance`, `Lieu_Naissance`, `Address`, `Redoublement`, `Consiel`, `CPI_Code`) VALUES (@Mat, @Nom, @Prenom, @Email, @SEXE, @DN, @LN, @Adrs, @Redouble, @Consiel, @CPI_Code);";
        MySqlCommand newcon = new MySqlCommand(newcon_sql, connection);
        newcon.CommandText = newcon_sql;
        newcon.Parameters.AddWithValue("@Mat", in_Mat);
        newcon.Parameters.AddWithValue("@Nom", in_nom);
        newcon.Parameters.AddWithValue("@Prenom", in_prenom);
        newcon.Parameters.AddWithValue("@Email", in_email);
        newcon.Parameters.AddWithValue("@SEXE", Sexe);
        newcon.Parameters.AddWithValue("@DN", in_date);
        newcon.Parameters.AddWithValue("@LN", in_Lieux);
        newcon.Parameters.AddWithValue("@Adrs", in_Adrs);
        newcon.Parameters.AddWithValue("@Redouble", in_Redouble);
        newcon.Parameters.AddWithValue("@Consiel", in_Consiel);
        newcon.Parameters.AddWithValue("@CPI_Code", CPI_Code);
        newcon.ExecuteNonQuery();
        String CCode = Concour_Code;
        String qq = "INSERT INTO `gestion_concour`.`condidat_concour` (`Matricule`, `Nom`, `Prenom`, `E_mail`, `password`, `Sexe`, `Date_Naissence`, `Lieu_Naissence`, `Address`, `Username`, `Redoublement`, `Consiel`, `Rattrapage`, `Concour_Code`) VALUES (@Matricule, @Nom, @Prenom, @E_mail, @password, @Sexe, @Date_Naissence, @Lieu_Naissence, @Address, @Username, @Redoublement, @Consiel, @Rattrapage, @Concour_Code);";
        MySqlCommand cmd = new MySqlCommand(qq, connection);
        cmd.CommandText = qq;
        cmd.Parameters.AddWithValue("@Matricule", in_Mat);
        cmd.Parameters.AddWithValue("@Nom", in_nom);
        cmd.Parameters.AddWithValue("@Prenom", in_prenom);
        cmd.Parameters.AddWithValue("@E_mail", in_email);
        cmd.Parameters.AddWithValue("@password", Password);
        cmd.Parameters.AddWithValue("@Sexe", Sexe);
        cmd.Parameters.AddWithValue("@Date_Naissence", in_date);
        cmd.Parameters.AddWithValue("@Lieu_Naissence", in_Lieux);
        cmd.Parameters.AddWithValue("@Address", in_Adrs);
        cmd.Parameters.AddWithValue("@Username", UserName);
        cmd.Parameters.AddWithValue("@Redoublement", in_Redouble);
        cmd.Parameters.AddWithValue("@Consiel", in_Consiel);
        cmd.Parameters.AddWithValue("@Rattrapage", null);
        cmd.Parameters.AddWithValue("@Concour_Code", CCode);
        cmd.ExecuteNonQuery();
        connection.Close();
        fill_grid(Interne, "SELECT * FROM gestion_concour.interne;");
        Email.Email_Sender(in_email, Password, UserName);
        Matricule.Clear();
        Nom.Clear();
        Prenom.Clear();
        E_mail.Clear();
        L_N.Clear();
        Addrs.Clear();
    }
 public void fill_grid(DataGrid dg, string query)
    {
        try
        {
            //conneter à la base de donnée (gestion_concour)
            MySqlConnection connection = new MySqlConnection(cnx_string);
            connection.Open();
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.ExecuteNonQuery();
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            DataTable dt = new DataTable("concour");
            da.Fill(dt);
            dg.ItemsSource = dt.DefaultView;
            da.Update(dt);
            connection.Close();
        }
        catch (Exception ex)
        {
            var v = new ModernDialog
            {
                Title = "Error",
                Content = ex.Message
            };
            v.Buttons = new Button[] { v.OkButton };
            var r = v.ShowDialog();
        }
    }
结果总是这样 问题在于:


解决方案是单独生成列,以便可以控制它们的视觉效果。例如:

<DataGrid Height="150" ItemsSource="{Binding MyCollection, UpdateSourceTrigger=PropertyChanged}"
 AutoGenerateColumns="False">
 <DataGrid.Columns>
   <DataGridTemplateColumn Header="Descrição" IsReadOnly="True" SortMemberPath="DescricaoServico" CanUserSort="True" MinWidth="260">
   <DataGridTemplateColumn.CellTemplate>
       <DataTemplate>
           <TextBlock Text="{Binding DescricaoServico}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
        </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
  </DataGridTemplateColumn>

<DataGridTemplateColumn Header="My Date" IsReadOnly="True" SortMemberPath="MyDateProperty" CanUserSort="True" MinWidth="260">
   <DataGridTemplateColumn.CellTemplate>
       <DataTemplate>
           <TextBlock Text="{Binding MyDateProperty, StringFormat={}{0:dd/MM/yyyy}}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
        </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
  </DataGridTemplateColumn>

</DataGrid>

这会将“MyDateProperty”列显示为dd/MM/yyyy

重复?具有
<DataGrid Height="150" ItemsSource="{Binding MyCollection, UpdateSourceTrigger=PropertyChanged}"
 AutoGenerateColumns="False">
 <DataGrid.Columns>
   <DataGridTemplateColumn Header="Descrição" IsReadOnly="True" SortMemberPath="DescricaoServico" CanUserSort="True" MinWidth="260">
   <DataGridTemplateColumn.CellTemplate>
       <DataTemplate>
           <TextBlock Text="{Binding DescricaoServico}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
        </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
  </DataGridTemplateColumn>

<DataGridTemplateColumn Header="My Date" IsReadOnly="True" SortMemberPath="MyDateProperty" CanUserSort="True" MinWidth="260">
   <DataGridTemplateColumn.CellTemplate>
       <DataTemplate>
           <TextBlock Text="{Binding MyDateProperty, StringFormat={}{0:dd/MM/yyyy}}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
        </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
  </DataGridTemplateColumn>

</DataGrid>