Partage
  • Partager sur Facebook
  • Partager sur Twitter

Filtrage Datagrid avec BDD [C#][WPF]

    15 juin 2020 à 16:52:59

    Bonjour à tous,

    Je débute en C# WPF et travaille sur une application qui dispose d'un datagrid lié à une base de donnée MySQL (rattaché directement au projet avec l'assistant), sur ce datagrid je dois être capable d'ajouter, de supprimer, de mettre à jour, de filtrer mes données.

    Mon problème intervient sur cette dernière, le filtrage de données sur mon datagrid.

    Explication détaillée :

    J'ai réussi à insérer et supprimer des lignes dans ma base de données depuis mon datagrid mais je suis bloqué pour ce qui est du filtrage. En effet, je souhaite filtrer mon DataGrid en fonction du contenu d'un TextBox mais je n'y parviens pas. J'ai essayé de filtrer directement ma CollectionViewSource mais le problème est qu'ici je n'ai pas créé mes colonnes et items depuis mon code… je récupère tout depuis la base de données… Je n'ai donc pas d'ObservableCollection ou autres méthodes utiles sous la main. Pourriez vous m'indiquer quelle méthode serait le plus adaptée à cette situation pour filtrer mon DataGrid, ou comment utiliser le filtrage avec une collection dans mon cas ? 

    Je vous donne une partie de mon code afin de vous aiguiller au mieux :

    <Window x:Class="WpfApp2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp2"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
        <Window.Resources>
            <local:liaisonDataSet x:Key="liaisonDataSet"/>
            <CollectionViewSource x:Key="table1ViewSource" Source="{Binding table1, Source={StaticResource liaisonDataSet}}"/>
            <CollectionViewSource x:Key="table2ViewSource" Source="{Binding table2, Source={StaticResource liaisonDataSet}}" Filter="CollectionViewSource_Filter"/>
        </Window.Resources>
    <Grid DataContext="{StaticResource table1ViewSource}">
            <DataGrid x:Name="table2DataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding Source={StaticResource table2ViewSource}}" Margin="384,211,10,10" RowDetailsVisibilityMode="VisibleWhenSelected">
                <DataGrid.Columns>
                    <DataGridTextColumn x:Name="iD_Table2Column" Binding="{Binding ID_Table2}" Header="ID Table 2" Width="*"/>
                    <DataGridTextColumn x:Name="nOMColumn1" Binding="{Binding C}" Header="NOM" Width="*"/>
                    <DataGridTextColumn x:Name="pRENOMColumn1" Binding="{Binding PRENOM}" Header="PRENOM" Width="*"/>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Button x:Name="bouton_action" Content="Supprimer" Click="Click_Bouton_Action" ClickMode="Release"/>
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
    <TextBox x:Name="TB_filtreNOM" HorizontalAlignment="Left" Height="23" Margin="146,248,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" TextChanged="TB_filtreNOM_Changed"/>
    </Grid>
     public partial class MainWindow : Window
        {
            WpfApp2.liaisonDataSet liaisonDataSet;
            WpfApp2.liaisonDataSetTableAdapters.table1TableAdapter liaisonDataSettable1TableAdapter;
            System.Windows.Data.CollectionViewSource table1ViewSource;
            WpfApp2.liaisonDataSetTableAdapters.table2TableAdapter liaisonDataSettable2TableAdapter;
            System.Windows.Data.CollectionViewSource table2ViewSource;
    
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
    
                liaisonDataSet = ((WpfApp2.liaisonDataSet)(this.FindResource("liaisonDataSet")));
                // Chargez les données dans la table table2. Vous pouvez modifier ce code selon les besoins.
                liaisonDataSettable2TableAdapter = new WpfApp2.liaisonDataSetTableAdapters.table2TableAdapter();
                liaisonDataSettable2TableAdapter.Fill(liaisonDataSet.table2);
                table2ViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("table2ViewSource")));
                table2ViewSource.View.MoveCurrentToFirst();
            }
    
            private void TB_filtreNOM_Changed(object sender, TextChangedEventArgs e)
            {
                
                // ??
                
            }
     private void CollectionViewSource_Filter(object sender, FilterEventArgs e)
            {
                if (e.Item != null)
                e.Accepted = ((string)e.Item).Contains(TB_filtreNOM.Text);
            }
    }
    
    

    Merci d'avance,

    Thomas




    • Partager sur Facebook
    • Partager sur Twitter

    Filtrage Datagrid avec BDD [C#][WPF]

    × 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