2016-05-13 11 views
1
importieren

In meiner WPF Anwendung habe ich ein DataGrid, das eine Tabelle aus MySql Datenbank die Spalten zeigen Typ DATE aber wenn ich das DataGrid füllt zeigt es mir DateTime (der Wert in der Tabelle und 12:00:00).DataGrid zeigt DateTime, wenn ich DATE Wert von MySql

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> 

Eingang in Tabelle

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(); 
    } 

Out Put Aus Tabelle

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(); 
     } 
    } 

das Ergebnis sieht immer wie dieses Result

+1

Ein Duplikat? [date-formating-in-wpf-datagrid] (http://stackoverflow.com/questions/7978249/date-formatting-in-wpf-datagrid) mit [dieser Antwort] (http://stackoverflow.com/a/ 16554340/1506454) – ASh

Antwort

1

Das „Problem“ ist hier:

<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"/> 

Die Lösung ist Spalten einzeln zu erzeugen, so dass Sie ihre visuelle Kontrolle zu bringen. Zum Beispiel wie folgt aus:

<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> 

Dies zeigt die Spalte 'MyDateProperty' als TT/MM/yyyy

Verwandte Themen