Linq - Group Join - Synatax Probleme

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 160 Antworten in diesem Thema. Der letzte Beitrag () ist von StGo.

    StGo schrieb:

    Wenn ich das Dataset typisiert erstellt habe und meine enthaltenen Tables in einem DGV anzeige und die Daten durch das DGV „verschmelze“ etspricht dies einem Join – oder?
    was meinst du mit "Daten-verschmelzen"?
    im 4-Views-Tut ist erklärt, was ein JoiningView ist: nämlich ein DGV, was eine Tabelle anzeigt, und darin die Fremdschlüssel-Spalten als ComboboxColumn.

    In deiner Anwendung taucht bisher keine ComboboxColumn auf.

    Deine Anwendung enthält auch keine Detailview.

    Sie enthält 2 ParentChildViews, nämlich Stammdaten->Xls und Stammdaten->Pdf.
    Und von beiden Views wird jeweils einer ausgeblendet, das ist eine Besonderheit.

    Jedenfalls gibt es keinen Grund für ein DGV, dir eine passende Datenzeile "anzubieten"
    @sonne75

    Laut Galileo Press openbook.galileocomputing.de/v…62a9fd5e3e8ada21ea2cf049f

    28.2.2 Datenzeilen hinzufügen


    ds.Products.AddProductsRow("Gewürzgurke",1, 100);


    geht das schon so. Aber ich danke dir auch für deine Hilfe und belasse es dabei. Ich kann dankend drauf verzichten.

    -----------------------------------------------------------------------------------------------------------------------------------------

    @EDR


    In deiner Anwendung taucht bisher keine ComboboxColumn auf.


    JaNein. Das DGV hatte ComboboxColumen´s gehabt und auch die Verknüpfungen wie im Video. Allerdings habe ich die Spalten "ausgeblendet" da sie nicht gebraucht werden in der Ansicht. Ich muss es morgen nochmal kontrollieren. Aber eigentlich denke ich das die Funktionalität noch da ist.


    Jedenfalls gibt es keinen Grund für ein DGV, dir eine passende Datenzeile "anzubieten"


    Ja das sehe ich auch so. Aus diesem Grund habe ich das Editieren der beiden ChildViews unterbunden. Im ParentView allerdings nicht. Anhand des Eintrags "Dateityp" könnte ich allerdings das passende ChildView einblenden welches wie jetzt schon vorhanden zum Editieren die passenden Textboxen mit anzeigt. Daraus könnte man eine neue Zeile erstellen. Oder ist die Idee falsch/mist/.. falls ja wäre ich für andere Design Vorschläge offen.

    Danke

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „StGo“ ()

    StGo schrieb:

    Anhand des Eintrags "Dateityp" könnte ich allerdings das passende ChildView einblenden welches wie jetzt schon vorhanden zum Editieren die passenden Textboxen mit anzeigt.
    ich hab natürlich keine Ahnung, was du inzwischen weiter-programmiert hast.
    Imo ergibt das nicht wirklich sinn, hier mit Textboxen und Zeugs zu arbeiten.
    Es handelt sich doch um DateiOrdner und Datei-Pfade.
    Sowas gibt man doch nicht per Textbox ein, sondern via OpenFile-/FolderBrowser-Dialog - oder?
    Guten Morgen zusammen,


    Du hättest nur von Anfang an dein Datenmodell sauber strukturieren müssen. Aber wer schon im Keller anfängt zu murksen der wird sein Dach niemals dicht bekommen. Was du da machst ist in einer Stunde Überlegung und max. 50 codezeilen realisierbar


    Klär mich auf was stimmt an dem Datenmodell nicht?


    Sowas gibt man doch nicht per Textbox ein, sondern via OpenFile-/FolderBrowser-Dialog - oder?


    Ist doch! Probier doch mal eine Zeile in den Stammdaten zu bearbeiten. Bearbeite den Eingabepfad. Dort erscheint ein Button mit dem ich den FilfeDialog öffne. Um aber zu entscheiden welches ChildView ich öffne um Blatt und Zelle einzugeben muss ich den Dateityp angeben. Hier schreibe ich direkt in die Zelle und zwar "xls" oder "pdf".


    ich hab natürlich keine Ahnung, was du inzwischen weiter-programmiert hast.


    Die Auswahl per Button ist dazugekommen (siehe Anhang). Wir reden aber von zewei verschiedenen Dingen! Du von dem Feld Pfad und ich vom Feld Dateityp. Das Feld Dateityp kann ich nicht als rollup gestalten da es die Auswahl des Dateityps nur zur Erstellung gibt.


    Ich habe schon mehr als einmal geschrieben, dass ich gerne Vorschläge annehme es besser zu machen. Also wenn jemand das Projekt sich anschaut und versteht was ich versuche kann er sich gerne Melden und einen anderne Lösungsweg vorschlagen.
    Dateien
    ich würde glaub vorschlagen, für den Pfad der Stammdaten gar keine Eingabe zu machen.
    Dieser Pfad ergibt sich doch aus dem Dateipfad.
    Ebenfalls aus dem Dateipfad ergibt sich, obs ein Xls ist oder ein pdf.

    also folgender workflow:
    1. DAteipfad mittels OFD aussuchen
    2. anhand von Ordner + Endung das passende Stammdaten suchen
    3. falls nicht vorhanden, generieren
    4. Datei-Datensatz generieren unter Einbeziehung des gefundenen oder generierten Stammdaten
    evtl wäre auch sinnvoll, nur einen Ordner anzugeben, und einen Algo entwickeln, der diesen Ordner durchsucht, und entsprechende Datensätze generiert.

    StGo schrieb:

    geht das schon so.


    Ich glaube, du missverstehst mich absichtlich. Ich habe nie gesagt, dass es NICHT geht. Weißt du, was ein Rückgabeparameter ist? Du kannst ihn nutzen, musst aber nicht.
    Wenn du ihn aber brauchst, um eine Relation zu übergeben, dann ist er genau dafür da.

    Aber bei dir ist ehe sowieso der Hopfen und Malz verloren, von daher werde ich dich nicht mehr behelligen :rolleyes:

    1. DAteipfad mittels OFD aussuchen

    2. anhand von Ordner + Endung das passende Stammdaten suchen

    3. falls nicht vorhanden, generieren

    4. Datei-Datensatz generieren unter Einbeziehung des gefundenen oder generierten Stammdaten


    1. Ist realisiert
    2. Ist auch realisiert. Anahd der Datei kann wird die Endung gefiltert und das entsprechende TabControl geöffnet.
    3. Ich denke der Fall kann nicht eintreten
    4. Hier geht mir der Erfindungsreichtung/das Wissen aus

    Zwei Probleme stellen sich jetzt:
    1. Wie schreibe ich die Eingesammelten Daten in das DataSet? Parent und Child.
    2. Wie gebe ich den erzeugten Button in der angeklickten Row zurück? Die Buttons werden bei jedem Klick mehr.

    Hier der aktuelle Code (im Anhang das komplette Projekt):

    VB.NET-Quellcode

    1. Private Sub StammdatenDataGridView_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles StammdatenDataGridView.EditingControlShowing
    2. Dim myButton As New Button 'DirectCast(sender, Button)
    3. Dim selektierteSpalte As String = ""
    4. Select Case StammdatenDataGridView.CurrentCell.ColumnIndex
    5. Case 1
    6. selektierteSpalte = "Eing"
    7. Case 2
    8. selektierteSpalte = "Ausg"
    9. End Select
    10. With myButton
    11. .Dock = DockStyle.Right
    12. .Name = "btnOpen" & selektierteSpalte
    13. .Text = "..."
    14. .Width = 25
    15. End With
    16. If Not StammdatenDataGridView.Controls.ContainsKey(myButton.Name) Then
    17. StammdatenDataGridView.EditingPanel.Controls.Add(myButton)
    18. End If
    19. myButton.BringToFront()
    20. Select Case myButton.Name
    21. Case "btnOpenEing"
    22. AddHandler myButton.Click, AddressOf myButton_ClickEing
    23. Case "btnOpenAusg"
    24. AddHandler myButton.Click, AddressOf myButton_ClickAusg
    25. End Select
    26. End Sub
    27. Private Sub myButton_ClickEing(sender As Object, e As EventArgs)
    28. 'MessageBox.Show("hier geht der OpenFileDialog auf")
    29. DatenAnlegenAendern("Eingabe")
    30. End Sub
    31. Private Sub myButton_ClickAusg(sender As Object, e As EventArgs)
    32. 'MessageBox.Show("hier geht der SaveFileDialog auf")
    33. DatenAnlegenAendern("Ausgabe")
    34. End Sub
    35. Private Sub DatenAnlegenAendern(ByRef typOfFileDialog As String)
    36. Dim Eingabepfad As String = ""
    37. Dim Dateiendung As String = ""
    38. Dim Ausgabepfad As String = ""
    39. TabControl1.SelectedIndex = 0
    40. TabControl2.SelectedIndex = 0
    41. Select Case typOfFileDialog
    42. Case "Eingabe"
    43. Dim openFileDialogEingabepfad As New OpenFileDialog()
    44. openFileDialogEingabepfad.InitialDirectory = "c:\"
    45. openFileDialogEingabepfad.RestoreDirectory = True
    46. If openFileDialogEingabepfad.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    47. Eingabepfad = openFileDialogEingabepfad.FileName
    48. Dateiendung = Eingabepfad.Substring(Eingabepfad.Count - 3, 3)
    49. End If
    50. Case "Ausgabe"
    51. Dim folderBrowserAusgabepfad As New FolderBrowserDialog
    52. If folderBrowserAusgabepfad.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    53. Ausgabepfad = folderBrowserAusgabepfad.SelectedPath
    54. End If
    55. End Select
    56. Select Case Dateiendung
    57. Case "xls"
    58. TabControl1.SelectedIndex = 1
    59. TabControl2.SelectedIndex = 1
    60. Case "pdf"
    61. TabControl1.SelectedIndex = 2
    62. TabControl2.SelectedIndex = 2
    63. End Select
    64. End Sub
    Dateien

    hälst du für jeden Ordner deines Dateisystems einen Stammdatensatz vor?


    Ich glaube wir reden aneinander vorbei. Ich trage doch nur eine Datei die ich später verarbeiten möchte in die Datenabk ein. Das bedeutet wenn ein Datensatz hinzugefügt wird handelt es sich um ein bestimmtest Dokument. Da muss ich nichts generieren. Das Dokument hat einen Eingabepfad (da wo es im Dateisystem liegt) und einen Ausgabepfad wo die Auswertung gespeichert wird.

    Ergibt das "Bild" jetzt mehr Sinn?
    Ich sag doch dein komplettes Datenmodell ist Edit by ErfinderDesRades: du meinst: suboptimal

    du brauchst die Unterscheidung zwischen pdf und excel gar nicht.

    du kannst doch einfach nur

    ID | NAME | EINGABEPFAD | AUSGABEPFAD | DATENTYP | STELLEWODULESENWILLST!!!

    bei der weiterverarbeitung brauchst du so doch nur nach datentyp unterscheiden wie die letzte Spalte interpretiert werden soll. Kein TabControl unsichtbar machen etc.

    Mit der Column Expression xls oder pdf kannst du die Spalten sogar fitlern, so leicht macht dir das die BindingSource!

    Deine StammdatenTabelle ist komplett überflüssig. Zum üben war dies viellecht ok aber alles was nach üben kommt macht diese Tabelle dir nur schwierigkeiten.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()


    ID | NAME | EINGABEPFAD | AUSGABEPFAD | DATENTYP | STELLEWODULESENWILLST!!!


    Auch eine Idee. Eine flache Tabelle vreinfach natürlich das ganze. Aber
    1. Wollte ich dsa aus Übungzwecken
    2. Wenn ich deine Variante mache muss ich die Usereingabe deutlich intensiver prüfen (Bsp.: "Blatt 1, Zelle D3", "Bl1; D3", "D3 Blatt1",......) und kann später das Dataset nicht für einen neuen Dateityp ändern für den eventuell andere Felder gebraucht werden.


    Datensatz generieren


    Ja du hast recht. Habe ich falsch verstanden. Dafür ist doch das Dataset da um meine neuen Daten einzutragen. Später schreibt es das Dataset dann weg in die DB.
    Hier fehlt mir die Idee wie ich das angehe.

    VB.NET-Quellcode

    1. Select Case typOfFileDialog
    2. Case "Eingabe"
    3. Dim openFileDialogEingabepfad As New OpenFileDialog()
    4. openFileDialogEingabepfad.InitialDirectory = "c:\"
    5. openFileDialogEingabepfad.RestoreDirectory = True
    6. If openFileDialogEingabepfad.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    7. Eingabepfad = openFileDialogEingabepfad.FileName
    8. Dateiendung = Eingabepfad.Substring(Eingabepfad.Count - 3, 3)
    9. 'Eingelesene daten ins Dataset schreiben?
    10. End If
    11. Case "Ausgabe"
    12. Dim folderBrowserAusgabepfad As New FolderBrowserDialog
    13. If folderBrowserAusgabepfad.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    14. Ausgabepfad = folderBrowserAusgabepfad.SelectedPath
    15. 'Eingelesene daten ins Dataset schreiben?
    16. End If
    17. End Select


    Schreibe ich an der Stelle der Kommentarfelder die Daten erst ins DGV und wenn sie komplett sind ins DataSet? Oder löst man das anders?
    ins dgv wird nix geschrieben.

    in zeile#9 könntest du theoretisch eine xls oder pdf-Row zufügen, je nach Eingabepfad und DateiEndung.

    jdfs. falls du beim 3-teiligen Datenmodell bleibst

    aber du wirst doch eine typisierte Datarow zufügen können, oder?
    nach 150 posts und zig mal angucken von Film#7 und Film#8 von vier Views-Videos
    Morgen zusammen,

    So die Zeile einfügen ist jetzt auch klar (denke ich zumindest). Jetzt stehe ich nur vor einen systematischen Problem. Wenn ich mir die Datei über den Dialog ausgewählt habe und dann den Ausgabepfad auswähle bekomme ich eine weitere neues Zeile. Zwinge ich ihn dazu die letzte Zeile zu benutzen oder gibt es einen besseren Weg die Usereingaben zu verarbeiten?

    Hänge das Projekt im aktuellen Zusatand an.

    VB.NET-Quellcode

    1. Private Sub DatenAnlegenAendern(ByRef typOfFileDialog As String)
    2. Dim Eingabepfad As String = ""
    3. Dim Dateiendung As String = ""
    4. Dim Ausgabepfad As String = ""
    5. TabControl1.SelectedIndex = 0
    6. TabControl2.SelectedIndex = 0
    7. Select Case typOfFileDialog
    8. Case "Eingabe"
    9. Dim openFileDialogEingabepfad As New OpenFileDialog()
    10. openFileDialogEingabepfad.InitialDirectory = "c:\"
    11. openFileDialogEingabepfad.RestoreDirectory = True
    12. If openFileDialogEingabepfad.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    13. Eingabepfad = openFileDialogEingabepfad.FileName
    14. Dateiendung = Eingabepfad.Substring(Eingabepfad.Count - 3, 3)
    15. 'Dim rwStammdaten = DirectCast(DirectCast(StammdatenBindingSource.Current, DataRowView).Row, dsStammdaten.StammdatenRow)
    16. End If
    17. Case "Ausgabe"
    18. Dim folderBrowserAusgabepfad As New FolderBrowserDialog
    19. If folderBrowserAusgabepfad.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    20. Ausgabepfad = folderBrowserAusgabepfad.SelectedPath
    21. End If
    22. End Select
    23. Dim rwStammdaten = DsStammdaten.Stammdaten.AddStammdatenRow(Eingabepfad, Ausgabepfad, Dateiendung)
    24. Select Case Dateiendung
    25. Case "xls"
    26. TabControl1.SelectedIndex = 1
    27. TabControl2.SelectedIndex = 1
    28. DsStammdaten.XLS.AddXLSRow(rwStammdaten, SheetTextBox.Text, CellTextBox.Text)
    29. Case "pdf"
    30. TabControl1.SelectedIndex = 2
    31. TabControl2.SelectedIndex = 2
    32. DsStammdaten.PDF.AddPDFRow(rwStammdaten, BereichTextBox.Text)
    33. Case Else
    34. TabControl1.SelectedIndex = 0
    35. TabControl2.SelectedIndex = 0
    36. End Select
    37. End Sub
    Dateien

    StGo schrieb:

    Zwinge ich ihn dazu die letzte Zeile zu benutzen oder gibt es einen besseren Weg die Usereingaben zu verarbeiten?
    was meinst du mit "zwingen"?
    Du kannst BindingSource.Position so setzen, dass die neu zugefügten Datensätze frisch angewählt sind - "zwingen" würde ich das noch nicht nennen ;)
    @shaebich
    Ja das ist mir auch aufgefallen. Darum habe ich in Post 148 gefragt ob jemand mir sagen ob ich den Button wieder disposen (oder ähnliches).

    Du kannst BindingSource.Position so setzen, dass die neu zugefügten
    Datensätze frisch angewählt sind - "zwingen" würde ich das noch nicht
    nennen


    Mit zwingen meinte ich lediglich das ich der BindingSource sagen muss, dass sie in der gleichen Zeile bleiben soll wie beim Auswählen des Eingabepfades. Ich war mir nicht sicher ob es systematisch eine bessere Lösung gibt.

    Gruß
    Ich glaube du solltest deine Anforderungen an dein Programm genau definieren, und einen neuen Thread aufmachen mit deinen momentanen Problemen oder Lösungen.

    Hier checkt kein Mensch mehr durch und ich glaube keiner liest sich die 160 Beiträge hier durch.

    Oder einfach einen Post in dem die momentanen Probleme erklärt werden. Viel zu großes wirrwarr hierdrinnen :D