Laden...

Forenbeiträge von MGernot Ingesamt 8 Beiträge

29.09.2019 - 18:33 Uhr

Hallo Abt,
ja danke für den Tip,werde ich in Zukunft vermeiden. Das ist so eine dumme Angewohnheit, die ich mir leider bei der VBA Programmierung eingehandelt habe.

29.09.2019 - 11:48 Uhr

Hallo Leute,
danke nochmal für eure Hilfe.Ich habe die Sache jetzt mal so mit JOIN gelöst, damit ich mal ein Erfolgserlebnis habe 😉 Bin immer wieder erstaunt, wie mächtig LINQ ist.
Soll man aber offensichtlich auch so nicht machen, sondern EF Core navigation properties verwenden.


  var analysis = (from a in context.ChemischeAnalysen
                                join p in context.ChemischeAnalysenDetails
                                on a.HeaderId equals p.ChemieId
                                select new
                                {
                                    Datum = a.Datum,
                                    Bezeichung = a.Bezeichung,
                                    Anmerkung = a.Anmerkung,
                                    Gerät = a.Gerät,
                                    Kategorie = a.Kategorie,
                                    Element = p.Element,
                                    Wert = p.Wert

                                }).ToList();

Ich merke jetzt das ich von diesen Technologien und Entwicklermuster viel zu wenig verstehe, um irgendwas sinnvolles auf die Beine zu stellen.

Danke, vorerst und schöne Grüße aus Österreich.

28.09.2019 - 19:49 Uhr

Hallo,
ja das war ein dummes Beispiel jetzt. Also ChemischeAnalysen representiert einen Header für eine Analyse, ChemischeAnalysenDetails beinhaltet alle unter diesem Header gemessenen Elemente:
Also eigentlich ware das eine Master->Detail ansicht, nur möchte ich in erstem Schritt nur eine flache Liste.

Edit: Toller Artikel, Mr. Sparkle. Den werde ich in jedem Fall durcharbeiten!

28.09.2019 - 19:11 Uhr

Hallo Witte,
danke für die Antwort. Würdest Du diesen Artikel zum Thema empfehlen, den ich im Forum entdeckt habe, oder gibt es zum Thema Viewmodel noch bessere Tutorials/Bücher?
https://www.codingfreaks.de/2017/08/14/wpf-und-mvvm-richtig-einsetzen-teil-5/

Danke

28.09.2019 - 19:06 Uhr

Hallo Mr. Sparkle,
danke für die Antwort.
Ja,das Ergebnis soll so sein wie in dieser Sicht in SQL Server.


CREATE VIEW [dbo].[ChemischeAnalyse]
AS
SELECT dbo.ChemischeAnalysen.Datum, dbo.ChemischeAnalysen.Bezeichung, dbo.ChemischeAnalysen.Anmerkung, dbo.ChemischeAnalysen.Gerät, dbo.ChemischeAnalysen.Kategorie, dbo.ChemischeAnalysen_Details.Element, dbo.ChemischeAnalysen_Details.Wert, 
             dbo.ChemischeAnalysen_Details.ChemieID
FROM   dbo.ChemischeAnalysen LEFT OUTER JOIN
             dbo.ChemischeAnalysen_Details ON dbo.ChemischeAnalysen.headerId = dbo.ChemischeAnalysen_Details.ChemieID
GO

Die beiden Klassen die EF Core generiert hat schauen so aus:


 public partial class ChemischeAnalysen
    {
        public ChemischeAnalysen()
        {
            ChemischeAnalysenDetails = new HashSet<ChemischeAnalysenDetails>();
        }

        public int HeaderId { get; set; }
        public DateTime? Datum { get; set; }
        public string Bezeichung { get; set; }
        public string Anmerkung { get; set; }
        public string Gerät { get; set; }
        public string Kategorie { get; set; }

        public virtual ICollection<ChemischeAnalysenDetails> ChemischeAnalysenDetails { get; set; }
    }



 public partial class ChemischeAnalysenDetails
    {
        public int Id { get; set; }
        public string Element { get; set; }
        public decimal? Wert { get; set; }
        public int? ChemieId { get; set; }

        public virtual ChemischeAnalysen Chemie { get; set; }
    }
}


28.09.2019 - 18:12 Uhr

Hallo Leute,
ich bin blutiger Anfänger im Bereich EF Core und WPF und versuche derzeit mir diese Technologien selbst beizubringen.
Also ich habe in SQL Server zwei Tabellen erstellt (ChemischeAnalysen und ChemischeAnalysenDetails) und beide mit einem Fremschlüssel verknüpft. Anschließend habe ich in VS in einem Konsolen-Projekt das Model mit Scaffold-DBContext erstellt. Dann konnte ich einfach mit LINQ die Daten abfragen:


var context = new Models.BetriebsdatenContext();
            var analysen = context.ChemischeAnalysen
                                                .Include(s => s.ChemischeAnalysenDetails)
                                                .ToList();

Das klappt einwandfrei und es kommen auch die korrekten Daten zurückgeliefert. Wobei ich jedoch gnadenlos gescheitert bin ist die Bindung der Daten der untergeordneten Tabelle an ein WPF Datagrid.
Ich kann die Daten der übergeordneten Tabelle ChemischenAnalysen problemlos binden, aber bei der den Chemischen Analysen untergeordneten Liste (ChemischeAnalysenDetails) wird in den Spalten nichts angezeigt und ich bekomme einen Binding Path expression Error für diese Felder.
(Siehe bitte Bild im Anhang.)
Irgendwo fehlt mir hier offensichtlich ein grundsätzliches Verständnis wie diese Bindung gehandhabt wird.Wenn mir hier bitte jemand einen Stubs in die richtige Richtung geben könnte, wäre ich sehr dankbar.Ich habe mir schon einiges zum Thema "WPF Databinding with nested Lists" angesehen, und verstehe einfach nicht warum es bei mir nicht funktioniert.


<Window x:Class="WpfTest.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:WpfTest"
        mc:Ignorable="d"
        Title="Analysis" Height="450" Width="800" Background="#FF797373">
        
    <Grid>
        <DataGrid x:Name="dataGrid1" HorizontalAlignment="Left" Height="401" Margin="10,10,0,0" VerticalAlignment="Top" Width="668" AutoGenerateColumns="False">

            <DataGrid.Columns>
                <DataGridTextColumn Header="Datum" Binding="{Binding Datum}" Width="100"/>
                <DataGridTextColumn Header="Bezeichnung" Binding="{Binding Bezeichung}" Width="100"/>
                <DataGridTextColumn Header="Anmerkung" Binding="{Binding Anmerkung}" Width="100"/>
                <DataGridTextColumn Header="Gerät" Binding="{Binding Gerät}" Width="100"/>
                <DataGridTextColumn Header="Kategorie" Binding="{Binding Kategorie}" Width="100"/>
                <DataGridTextColumn Header="Element" Binding="{Binding ChemischeAnalysenDetails.Element}" Width="50"/>
                <DataGridTextColumn Header="Wert" Binding="{Binding ChemischeAnalysenDetails.Wert}" Width="50"/>
                <DataGridTextColumn Header="ChemieID" Binding="{Binding ChemischeAnalysenDetails.ChemieId}" Width="*"/>
            </DataGrid.Columns>
        </DataGrid>
        <Button x:Name="btnPopulate" Content="Bind&#xD;&#xA;" HorizontalAlignment="Left" Height="27" Margin="683,10,0,0" VerticalAlignment="Top" Width="100" Click="BtnPopulate_Click"/>

    </Grid>
</Window>


Vielen herzlichen Dank für Eure Hilfe.

22.02.2009 - 13:43 Uhr

Vielen Dank, ja das funktioniert!
Ich hätte zwar schwören können, das ich genau das probiert habe,
aber ich werde wohl alt!

Danke jedenfalls,

Meli

22.02.2009 - 11:49 Uhr

Hallo Leute!
Ist schön wieder hier zu sein!

Folgendes Problem:
Ich möchte eine Klasse mittels BinaryFormatter serialisieren, die über ein Ereignis/Delegate mit dem Hauptformular kommuniziert.
Leider versucht der BinaryFormatter offensichtlich deswegen die ganze Form Klasse mitzuserialisieren.Was ja bekanntlich nicht funktioniert.
Gibt es eine Möglichkeit dies zu verhindern?
Ich könnte ja das Ereignis kündigen, aber diese Klasse enthält zahlreiche weitere Klassen die ebenfalls mit der Haupform kommunizieren.

Oder bin ich am komplett falschen Dampfer?

Für jede Hilfe bin ich schon im Vorraus dankbar