Partage
  • Partager sur Facebook
  • Partager sur Twitter

Peupler un datagrid binding

Sujet résolu
    21 octobre 2018 à 21:08:13

    Bonjour, Tout d'abord je vais vous exposer le contexte.

    j'ai une classe client qui contient mes attributs ainsi que mon constructeur etc...

    ensuite j'ai une classe database ou a l'interieur j'effectue ma connection a la bdd ainsi que ma requête qui va me permettre d'avoir tout mes client dans une liste. Et voici mon probleme je souhaite donc maintenant peuple mon datagrid a partir de ma list client je vous expose mon code et ma tentative. En espérant que quelqu’un puisse m'explique comment faire.

    //classe database

      public List<Client> GetAllClient()
            {
                string query = "SELECT * FROM t_clients";
    
                dbClient.Clear();
    
                if (Database.OpenConnection())
                {
                    MySqlCommand cmd = new MySqlCommand(query, connection);
    
                    MySqlDataReader dataReader = cmd.ExecuteReader();
    
                    while (dataReader.Read())
                    {
    
                        Client client = new Client(Convert.ToInt16(dataReader["id"]),
                        Convert.ToString(dataReader["nom"]), Convert.ToString(dataReader["prenom"]),
                        Convert.ToString(dataReader["pays"]), Convert.ToInt32(dataReader["cp"]),
                        Convert.ToString(dataReader["ville"]), Convert.ToString(dataReader["adresse"]),
                        Convert.ToInt32(dataReader["tel"]), Convert.ToString(dataReader["mail"]));
                        dbClient.Add(client);
                       
                    }
                    dataReader.Close();
    
                    Database.CloseConnection();
                }
    
                return dbClient;
            }

    // Clients.xaml

      <DataGrid x:Name="datagridClients" AutoGenerateColumns="False" Margin="69,0,0,0" SelectionChanged="DataGrid_SelectionChanged" Background="#E5F5F5F5" ItemsSource="{Binding listClient}">
    
                    <DataGrid.Columns>
    
                        <DataGridTextColumn Header="Nom" Binding="{Binding Path=Nom}"/>
    
                            <DataGridTextColumn Header="Prenom" Binding="{Binding Path=Prenom}"/>
    
                            <DataGridTextColumn Header="Pays" Binding="{Binding Path=Pays}"/>
    
                            <DataGridTextColumn Header="CP" Binding="{Binding Path=CP}"/>
    
                            <DataGridTextColumn Header="Ville" Binding="{Binding Path=Ville}"/>
    
                            <DataGridTextColumn Header="Adresse" Binding="{Binding Path=Adresse}"/>
    
                            <DataGridTextColumn Header="Telephone" Binding="{Binding Path=Telephone}"/>
    
                            <DataGridTextColumn Header="Mail" Binding="{Binding Path=Mail}"/>
    
                        <DataGridTemplateColumn Header="">
    
                            <DataGridTemplateColumn.CellTemplate>
    
                                <DataTemplate>
    
                                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" >
    
                                        <Button Name="btnDelete" Style="{StaticResource MaterialDesignFloatingActionMiniAccentButton}" Width="25" Height="25" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="#FFAE0C0C" Click="ButtonDelete_Click" Margin="0,15,0,14.667">
    
                                            <materialDesign:PackIcon Kind="Delete"/>
    
                                        </Button>
    
                                    </StackPanel>
    
                                </DataTemplate>
    
                            </DataGridTemplateColumn.CellTemplate>
    
                        </DataGridTemplateColumn>
    
                    </DataGrid.Columns>
    
                </DataGrid>



    //Clients.xaml.cs

     public Clients()
    
            {
    
                InitializeComponent();
    
                Init();
    
            }
    
            public void Init()
    
            {
    
                Classes.Database.GetDb().InitConnection();
    
                listClient = Classes.Database.GetDb().GetAllClient();
    
                datagridClients.ItemsSource = listClient;
    
                foreach (Client Leclient in listClient)
    
                {         
    
                   // datagridClients.ItemsSource = listClient;
    
                   // datagridClients.DataContext = listClient;
    
                }
    
            }



    -
    Edité par Altx 21 octobre 2018 à 21:09:26

    • Partager sur Facebook
    • Partager sur Twitter
      22 octobre 2018 à 11:57:23

      Des raisons particulières pour utiliser ces vieux machins obsolètes depuis 15 ans que sont les DataReader ???

      Parce qu'avec des trucs comme les DataSet et Entity Framework, le DataBinding, c'est fait quasi automatiquement.

      Et quitte à faire du WPF, pensez au Design Pattern MVVM pour ne pas galérer pour rien.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        22 octobre 2018 à 14:55:53

        Cela est imposer par notre professeur d'utiliser les DataReader
        • Partager sur Facebook
        • Partager sur Twitter
          22 octobre 2018 à 19:28:51

          Putain de dinosaure.

          Et il vous demande de faire du WPF, ce saurien d'un autre âge ? Chercher la logique !!!

          Faites en sorte que GetAllClient() renvoie une DataTable et pas une List<Client>.

          https://stackoverflow.com/questions/16964093/binding-dataset-to-datagrid-in-wpf

          Après si vous voulez toujours cette cochonnerie de List générique,

          https://stackoverflow.com/questions/4983951/how-do-i-bind-a-listcustomobject-to-a-wpf-datagrid

          Pensez à bien mettre les propriétés utilisées par votre DataBinding comme public.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

          Peupler un datagrid binding

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown