Laden...

Datagrid durch Auswahl aus ComboBox filtern

Erstellt von schattenparker vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.671 Views
S
schattenparker Themenstarter:in
2 Beiträge seit 2017
vor 7 Jahren
Datagrid durch Auswahl aus ComboBox filtern

Hallo Zusammen,

ich beschäftige mich seit einigen Wochen nun mit C# und WPF. Seit gut einer Woche hänge ich aber fest und irgendwie fehlt mir der Anstoß.

Habe mir inzwischen unzählige Seiten durchgelesen und haufenweise Videos angeschaut aber irgendwie hänge ich fest und komme nicht weiter.

Was habe ich:
Ich habe ein Dataset mit zwei Tabellen.
Auf meinem Grid habe ich eine DataGrid und eine Combobox.

Das Datagrid habe ich mit einer Tabelle aus dem Dataset verbunden.
Die Combobox mit der zweiten Tabelle aus dem Dataset.

Das Datagrid hat die Spalten: Erfasser (eine Nummer), Produkt, Summe
Die Tabelle für die Combobox besteht aus zwei Spalten: Erfasser (die Nummer von oben) und ErfName (in Klartext).

ErfName wird in der Combox anzeigt. Ich möchte nun eigentlich, dass wenn ich in der Box einen Namen auswähle, im Datagrid die Einträge davon angezeigt werden.

Ich steh am Anfang von C# und WPF aber mal soll sich ja Herausforderungen suchen 😃

Hier mal noch mein Code:

<Window x:Class="TestDB.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:TestDB"
        mc:Ignorable="d"
        Title="MainWindow" Height="600" Width="1000">

    <Grid>
        <ComboBox x:Name="cbErf" HorizontalAlignment="Left" Margin="23.5,65,0,0" VerticalAlignment="Top" Width="120" Grid.Column="1" ItemsSource="{Binding}"/>
    
        
        <DataGrid x:Name="dataGridMain" Margin="10,260,10,0" VerticalAlignment="Top" Height="302" MinWidth="800" ColumnWidth="auto" CanUserAddRows="False" 
                  AutoGenerateColumns="False" ItemsSource="{Binding}" >

            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding ErfName}" Header="Erfasser"/>
                <DataGridTextColumn Binding="{Binding Produkt}" Header="Produkt"/>
                <DataGridTextColumn Binding="{Binding Summe}" Header="Summe"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

und mein c#


public partial class MainWindow : Window
    {
        private DataSet dsMaster = new DataSet();
        private string sqlAdress = @"Pfad_ACCESS_DB";

        public MainWindow()
        {
            InitializeComponent();
            LoadDB();       //Laden der Datenbank
            LoadComboBox(); //Laden der Comboboxen       
            dataGridMain.UpdateLayout();
        }

private void LoadDB()
        {
            try
            {
                //Connect Database
                OleDbConnection con = new OleDbConnection();
                con.ConnectionString = sqlAdress;
                con.Open();

                //Datatable für DataGrid, Erfasser laden
                OleDbDataAdapter adptErfasser = new OleDbDataAdapter("SELECT Erfasser, ErfName FROM (Erfasser);", con);
                OleDbDataAdapter adptMaster = new OleDbDataAdapter("SELECT Erfasser, Summe, Produkt, FROM [Basis];", con);
                                
                adptMaster.Fill(dsMaster, "tblMaster");
                adptErfasser.Fill(dsMaster, "tblErfasser");

               dataGridMain.DataContext = dsMaster.Tables["tblMaster"];
               con.Close();
            }
            catch (Exception e)
            {
                MessageBox.Show("Verbindung zur Datenbank konnte nicht hergestellt werden");
            }
        }


private void LoadComboBox()
        {
            // Combobox "Erfasser" mit Werten Füllen
            cbErf.ItemsSource = dsMaster.Tables["tblErfasser"].DefaultView;
            cbErf.DisplayMemberPath = "ErfasserName";
            cbErf.SelectedValuePath = "Erfasser";
        }  
    }
P
441 Beiträge seit 2014
vor 7 Jahren

Hi,

du bindest an beide Controls die gleiche Datenquelle.
Wenn du im Abhängigkeit von der einen in der anderen etwas darstellen möchtest müsstest du diese Abhängigkeite auch darstellen.

In WPF geht das am besten (und am einfachsten) über das MVVM. Ich würde dir folgende Beiträge dazu empfehlen:
[Artikel] Drei-Schichten-Architektur
[Artikel] MVVM und DataBinding