Laden...

Datagrid aus anderem Fenster ansprechen

Erstellt von Spooner8 vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.008 Views
S
Spooner8 Themenstarter:in
40 Beiträge seit 2020
vor 3 Jahren
Datagrid aus anderem Fenster ansprechen

Hi zusammen

Ich bin noch sehr frisch im Thema und habe zu meinem (sicherlich kleinen) Problemchen keine Lösung gefunden die mir das als "Anfänger" erklärt.

Und zwar will ich eigentlich nur im Fenster "MainWindow" wo sich ein Datagrid befinden das Datagrid befüllen anhand eines zweiten Fensters worin sich einige Text- und Comboboxen befunden. Dafür habe ich einmal im MainWindow einen Button "Hinzufügen" der erst ein Fenster öffnet worin ich wiederum sagen kann was für eine Position ich hinzufügen will und darauf hin dann ein Fenster worin die Auswahl getroffen wird.
Mit dem Button "Übernehmen" im Positionsfenster, soll dann einfach ein Eintrag angefügt werden. Leider kann ich das Datengrid wohl nicht direkt ansprechen vom Code des Positions-Erfassungsfenster...

Folgende Codes sind mal soweit geschrieben:

Mainwindow:

<StackPanel>
        <DataGrid x:Name="dg_positionen">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Anzahl" Binding="{Binding Anzahl}"/>
                <DataGridTextColumn Header="Beschrieb" Binding="{Binding FireWin}"/>
                <DataGridCheckBoxColumn Header="Per Pos."/>
                <DataGridTextColumn Header="Breite" Binding="{Binding Breite}"/>
                <DataGridTextColumn Header="Höhe" Binding="{Binding Höhe}"/>
                <DataGridTextColumn Header="Wandstärke" Binding="{Binding Wandstärke}"/>
                <DataGridTextColumn Header="Preis/Stk." Binding="{Binding Preis}"/>
                <DataGridTextColumn Header="Preis Total" Binding="{Binding Totalpreis}"/>
            </DataGrid.Columns>
        </DataGrid>
        <Button Content="Neue Position" x:Name="btn_NeuePosition" Click="btn_NeuePosition_Click" Margin="20" HorizontalAlignment="Left"/>
    </StackPanel>
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btn_NeuePosition_Click(object sender, RoutedEventArgs e)
        {
            Window_NeuePosition neuePosition = new Window_NeuePosition();
            neuePosition.Show();
        }
    }

Auswahlfenster:

 <StackPanel>
        <Button Content="EasyWin" x:Name="btn_newEasyWin" Margin="10"/>
        <Button Content="FireWin EI30" x:Name="btn_newFireWin" Click="btn_newFireWin_Click" Margin="10, 0"/>
    </StackPanel>
public partial class Window_NeuePosition : Window
    {
        public Window_NeuePosition()
        {
            InitializeComponent();
        }

        private void btn_newFireWin_Click(object sender, RoutedEventArgs e)
        {
            Window_FireWin fireWin = new Window_FireWin();
            fireWin.Show();
            this.Close();
        }
    }

Und noch das eigentliche Konfigurationsfenster:

 <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        
        <StackPanel Grid.Column="0">
            <Label Content="Anzahl:"/>
            <GroupBox Header="Massangabe">
                <StackPanel>
                    <Label Content="Breite:"/>
                    <Label Content="Höhe:"/>
                </StackPanel>
            </GroupBox>
            <Label Content="Wandstärke:" Margin="0, 5"/>
            <Label Content="Glasoberfläche innen:"/>
            <Label Content="Glasoberfläche aussen:"/>
            <Label Content="Oberfläche:"/>
            <Label Content="Farbe:"/>
        </StackPanel>

        <StackPanel Grid.Column="1">
            <TextBox x:Name="txb_Anzahl" Margin="4"/>
            <ComboBox x:Name="cb_Massangabe" Margin="4, 0" SelectedIndex="0">
                <ComboBoxItem Content="Abdeckrahmen Aussenmass"/>
                <ComboBoxItem Content="Monoblock Aussenmass"/>
                <ComboBoxItem Content="Rohe Öffnung"/>
            </ComboBox>
            <TextBox x:Name="txb_Breite" Margin="4"/>
            <TextBox x:Name="txb_Höhe" Margin="4, 0"/>
            <TextBox x:Name="txb_Wandstärke" Margin="4, 15, 4, 0"/>
            <ComboBox x:Name="cb_GlasoberflächeInnen" Margin="4, 10, 4, 0" SelectedIndex="0">
                <ComboBoxItem Content="klar"/>
                <ComboBoxItem Content="satiniert"/>
            </ComboBox>
            <ComboBox x:Name="cb_GlasoberflächeAussen" Margin="4, 8, 4, 0" SelectedIndex="0">
                <ComboBoxItem Content="klar"/>
                <ComboBoxItem Content="satiniert"/>
            </ComboBox>
            <ComboBox x:Name="cb_Oberfläche" Margin="4" SelectedIndex="0">
                <ComboBoxItem Content="Standard"/>
                <ComboBoxItem Content="RAL nach Wahl (ohne Sonderfarben)"/>
            </ComboBox>
            <TextBox x:Name="txb_Farbe" Margin="4, 0" Text="RAL 9016" IsEnabled="False"/>
        </StackPanel>

        <Button x:Name="btn_Übernehmen" Content="Übernehmen" Grid.Column="1" Grid.Row="1" Click="btn_Übernehmen_Click"/>
    </Grid>
public partial class Window_FireWin : Window
    {

        public Window_FireWin()
        {
            InitializeComponent();
        }

        private void btn_Übernehmen_Click(object sender, RoutedEventArgs e)
        {
            FireWin position = new FireWin();

            position.Anzahl = Convert.ToInt32(txb_Anzahl.Text);
            position.Breite = Convert.ToDouble(txb_Breite.Text);
            position.Höhe = Convert.ToDouble(txb_Höhe.Text);
            position.Wandstärke = Convert.ToInt32(txb_Wandstärke.Text);
            position.Glas1 = "6mm ESG";
            position.Glas2 = "11mm Pyranova";
            position.Glas3 = "6mm ESG";
            position.Glasoberfläche1 = cb_GlasoberflächeInnen.Text;
            position.Glasoberfläche2 = cb_GlasoberflächeAussen.Text;
            position.Oberfläche = txb_Farbe.Text;

            position.Berechnen();

        }
    }

Ich hoffe das was soweit genug verständlich formuliert =)

PS: Ja es ist richtig, dass nicht alle Parameter der Konfiguration dann ins Datagrid einfliessen.
Das ist weil später noch andere Artikel kommen die nicht die selben Parameter haben. (nur die im Datagrid jetzt, sind dann identisch zu den anderen Artikeln)
Vielleicht müsste ich ohnehin die Auswahl in einer Gesammttabelle speichern worin von jedem Artikel alle Parameter beinhaltet sind und dann von dort das Datagrid befüllen?

Danke schon mal für eure Unterstützung.

4.942 Beiträge seit 2008
vor 3 Jahren

Hallo und willkommen,

s. [FAQ] Kommunikation von 2 Forms sowie meinen eigenen Artikel dazu: Kommunikation von 2 Forms, d.h. mittels einem eigenen Ereignis, das abonniert wird (s.a. [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse)).

Für WPF solltest du jedoch [Artikel] MVVM und DataBinding verwenden (dabei ist jedoch das Öffnen eines neuen Fensters MVVM-konform etwas komplizierter).

S
Spooner8 Themenstarter:in
40 Beiträge seit 2020
vor 3 Jahren

Hi Th69

Danke für deine rasche Rückmeldung. Ich werde mir den Artikel bezüglich MVVM sehr gerne genauer anschauen.
Ich versuche mir aktuell wirklich stück für stück alles einzuprägen mit diversen Videokursen.
Von MVVM hatte ich bisher noch nichts gehört. Gehört das zu den Design Patterns?
Kurse zu C# und WPF habe ich schon geschaut und geübt. Nun bin ich am Kurs für Design Patterns und hoffe danach mal zumindest die 3 Grund-Himmelsrichtungen zu kennen und bereit zu sein um das gelernte miteinander sinnvoll zu verbinden.
Wo ich mich für C# entschieden habe wusste ich noch nicht, dass WPF und auch die Patterns noch als separates Thema hinzu kommen. Alles noch etwas viel für mich.

PS: Wenn jemand aus der Schweiz (Aargau und Umgebung) sein sollte und gerne mal über mein Vorhaben lauschen kann damit ich die richtigen Ansätze dafür habe. Gerne melden. Bier geht auf mich =)

Gruss Spooner

4.942 Beiträge seit 2008
vor 3 Jahren

Ja, MVVM ist ein Entwurfsmuster (Design Pattern) (bzw. sogar als Architekturmuster angesehen), und ist eine Abwandlung vom Model View Controller (MVC) bzw. Model View Presenter (MVP).

Dann hoffe ich für dich, daß bei dem Kurs zu den Design Patterns diese intensiv erklärt werden, so daß du MVVM auch direkt anwenden kannst.

S
Spooner8 Themenstarter:in
40 Beiträge seit 2020
vor 3 Jahren

Danke dir für deine Antworten. Das hat mir schon mal wieder etwas Licht ins Dunkle gebracht damit ich sehe das ich auf dem richtigen Weg bin aber eben noch Geduld brauche bis genau dieses Thema an der Reihe ist.

Die Kurse waren und sind bisher sehr gut und "Anfänger freundlich" erklärt.
Aber genauso Detailreich damit man später nicht nur das nötigste weiss, sondern auch tatsächlich auch tieferes Wissen aufbauen kann.

In diesem Sinne würde ich sagen, dass mein Thema entsprechend geschlossen werden kann.