vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
DataView über 2 DataTables? 
Autor: ProXy
Datum: 16.09.08 08:44

Guten Morgen zusammen,

ich habe da ein kleines Problem und hoffe, Ihr könnt mir helfen. Ich hab ein Datagridview, welches Artikelgruppen enthält, die Daten dafür kommen aus einer DataTable, die mit einer DataView gefiltert wird. Abhängig von der SelectedRow im DataGridView werden die Artikel der gewählten Artikelgruppe in einem zweiten DataGridView angezeigt. Hier mal ein Bild, wie es aktuell aussieht:

http://img237.imageshack.us/my.php?image=demois7.jpg

Unter dem zweiten DataGridView steht die Anzahl der Einträge, diese Anzahl würde ich gerne im ersten DataGridView als weitere Spalte anzeigen, so dass zu jeder Gruppe gleich die Anzahl der Einträge ersichtlich ist. Leider sind zum einen die Daten für Gruppe und Artikel in zwei unterschiedlichen DataTables, zum Anderen bräuchte ich sowas wie einen count() auf die zweite DataTable.

Hat jemand eine Idee, ob und wie das mit einer DataView zu realisieren ist?

Danke,
Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataView über 2 DataTables? 
Autor: ModeratorDaveS (Moderator)
Datum: 16.09.08 11:27

Wenn du eine Relation definiert hast kannst du ein Computed Column haben mit Count für die Untermenge.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataView über 2 DataTables? 
Autor: ProXy
Datum: 16.09.08 12:00

Danke für den Hinweis. Eine Relation zwischen den beiden DataTables habe ich. Ich habe mal nach "Computed Column" gesucht, schlauer bin ich deswegen leider noch nicht. Ist diese Column ungebunden?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataView über 2 DataTables? 
Autor: ModeratorDaveS (Moderator)
Datum: 16.09.08 12:41

Mit Northwind als Beispiel so kann man die Anzahl Orders pro Customer als zusätzliche Spalte darstellen:
  Me.NwindDataSet.Tables("Customers").Columns.Add("OrderCount", GetType( _
    Integer), "Count(Child.CustomerID)")

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataView über 2 DataTables? 
Autor: ProXy
Datum: 16.09.08 13:43

Habe inzwischen eine Lösung gefunden, siehe ganz unten!




Ich habe nun versucht, eine berechte Spalte in meine DataTable hinzuzufügen, so wie es dein Beispiel aufzeigt bzw. wie es bei MSDN (http://msdn.microsoft.com/de-de/library/bb979485.aspx) steht.

Ich erhalte allerdings folgende Exception: Ungebundener Verweis im Aggregatausdruck 'System.Data.AggregateNode'.

Eventuell ist die Reihenfolge meiner DataTables falsch..hier mal ein Auszug aus dem Code:

        gdsSet = New DataSet
        gdsSet.Tables.Add(generateTable()) 'Kinder-Tabelle
        gdsSet.Tables.Add(generateGruppen()) 'VaterTabelle
 
 
        drRelation = New DataRelation("relGruppen", gdsSet.Tables( _
          "dtGruppen").Columns("Artikel"), gdsSet.Tables("dtData").Columns( _
          "Artikel"), True)
        gdsSet.Relations.Add(drRelation)
Und hier werden die DataTables erstellt:

    Private Function generateGruppen() As DataTable
        Dim dtTemp As DataTable
 
        dtTemp = New DataTable
        dtTemp.Columns.Add("Artikel", GetType(String))
        dtTemp.Columns.Add("Anzahl", GetType(Integer), "COUNT(Child(" & _
          "dtData).Artikel)")
        dtTemp.TableName = "dtGruppen"
 
        Return dtTemp
    End Function
 
    Private Function generateTable() As DataTable
        Dim dtTemp As DataTable
        dtTemp = sqlDataTable("SELECT Artikel.AR_Nummer," & _
          "Artikelgruppe.AGR_Bezeichnung, Artikel.AR_Bezeichnung FROM Artikel" & _
          "LEFT JOIN Artikelgruppe ON Artikelgruppe.AGR_Nummer =" & _
          "Artikel.FK_AGR_Nummer")
        dtTemp.Columns.Add("Artikel", GetType(String))
        dtTemp.TableName = "dtData"
 
        Return dtTemp
    End Function
Die Spalte Artikel ist in beiden Tabellen vorhanden und bildet den Contraint. Zur Laufzeit erstelle ich Einträge in die Vatertabelle und update die Kindertabelle.

Hast du eine Idee, was ich falsch mache?



Nachtrag: Wenn ich die Expression setze, nachdem die Relation drauf ist, funktioniert alles wie gewollt. Danke für die Mühe!

Beitrag wurde zuletzt am 16.09.08 um 14:09:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel