Autor Beitrag
Nordstern
Hält's aus hier
Beiträge: 10

Win XP Prof.
C# (VS2008)
BeitragVerfasst: Mo 02.08.10 11:00 
Hallo liebes c# Forum,

ich möchte folgende Aufgabenstellung lösen:

In einem Dataset habe ich 3 Tabellen, die über Relationen miteinander verknüft sind. Die Tabellen zeige ich in jeweils einem Datagridview Steuerelement an - funktioniert.
Jetzt möchte ich einem Datagridview eine zusätzliche Spalte generieren, die dynamisch das Produkt aus einen Feld von Tabelle A und einen Feld aus Tabelle B anzeigt.

Der Lösungsansatz, dies schon in der SQL Abfrage zu erledigen, ist nicht möglich, da Join-Abfragen sich nicht über den Dataadapter speichern lassen.

Wie mache ich das? Vielen Dank für Eure Hilfe
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 02.08.10 18:24 
Die Spalte kannst du direkt in die DataTable einfügen - schau dir einmal DataColumn.Expression an, besonders wohl den Abschnitt Parent/Child Relation Referencing :) .

_________________
>λ=

Für diesen Beitrag haben gedankt: Nordstern
Nordstern Threadstarter
Hält's aus hier
Beiträge: 10

Win XP Prof.
C# (VS2008)
BeitragVerfasst: Di 03.08.10 17:03 
Hallo,

vielen Dank für die schnelle Antwort. Über die genannten Stichworte habe ich schnell eine Lösung gefunden. Jedoch wenn ich die Parent/Child Parameter benutze bekomme ich die Fehlermeldung "Das Token 'Child' kann an Position 17 nicht interpretiert werden".
Anbei mein Quellcode:


DataColumn totalColumn = new DataColumn();
totalColumn.DataType = System.Type.GetType("System.Int16");
totalColumn.ColumnName = "total";
totalColumn.Expression = "Parent.Anzahl * Child(Fahrtenbuch-Fahrten).strecke";

Kannst du mir da weiterhelfen?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 03.08.10 17:40 
Das dürfte hieran liegen:
Zitat:
A column in a child table may be referenced in an expression by prepending the column name with Child. However, because child relationships may return multiple rows, you must include the reference to the child column in an aggregate function. For example, Sum(Child.Price) would return the sum of the column named Price in the child table.

Zwar nicht die feine art, aber wenn du eine 1:1-Beziehung hast, kannst du den Child-Teil ja einfach in ein Sum() wrappen.

_________________
>λ=

Für diesen Beitrag haben gedankt: Nordstern
Nordstern Threadstarter
Hält's aus hier
Beiträge: 10

Win XP Prof.
C# (VS2008)
BeitragVerfasst: Di 03.08.10 17:59 
Hallo,

jetzt bekomme ich folgende Fehlermeldung:

Syntaxfehler im Aggregatargument: Es wird ein Einzelspaltenargument erwartet, das möglicherweise einen 'Child'-Qualifizierer hat.

Anbei nochmal meine Änderung:


totalColumn.Expression = "Parent.anzahl * SUM(Child(Fahrtenbuch-Fahrten).strecke)";

Ich bin ratlos. Schau doch bitte nochmal. Danke
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 03.08.10 18:55 
Und jetzt bitte noch ein eckiges Klammernpaar um die Relation ;) .

_________________
>λ=

Für diesen Beitrag haben gedankt: Nordstern
Nordstern Threadstarter
Hält's aus hier
Beiträge: 10

Win XP Prof.
C# (VS2008)
BeitragVerfasst: Di 03.08.10 20:57 
Hallo,

ich hoffe ich nerve nicht.

Fehlermeldung:
Die Tabelle [tab_fahrtenbuch] hat mehrere Beziehungen. Geben Sie einen eindeutigen Beziehungsnamen im Ausdruck 'System.Data.LookupNode' an.

kommt in der Zeile:

dt_Fahrtenbuch.Columns.Add(totalColumn);


Hier meine Änderung:

totalColumn.Expression = "Parent.strecke * SUM(Child([Fahrtenbuch2Fahrten]).anzahl)";

(habe aus Verzweiflung auch den Bindestrich durch 2 ersetzt)

Ich weiß nicht mehr weiter.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 03.08.10 21:12 
Ehrlich gesagt bin ich von O/RMs zu verwöhnt, um mir über DataSets noch groß Gedanken zu machen ;) . Wenn du ein komplettes Beispiel ohne Anbindung zusammenstellen könntest, würde ich mir es noch einmal anschauen. Aber ansonsten würde ich fast empfehlen, darin nicht noch mehr Zeit zu investieren, sondern die Spalte von Hand zu füllen.

_________________
>λ=

Für diesen Beitrag haben gedankt: Nordstern
Nordstern Threadstarter
Hält's aus hier
Beiträge: 10

Win XP Prof.
C# (VS2008)
BeitragVerfasst: Mi 04.08.10 19:54 
So endlich gelöst. Die richtige Syntax lautet:

totalColumn.Expression = "anzahl * Parent(Fahrtenbuch2Fahrten).strecke";
(parent und child waren vertauscht)

Vielen Dank für die Unterstützung. Was ist den O/RMs??
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 04.08.10 20:16 
en.wikipedia.org/wiki/O/RM

Da wäre ich mit
ausblenden C#-Quelltext
1:
public double Total { get { return Anzahl * Fahrt.Strecke; } }					

bedient :) .

_________________
>λ=

Für diesen Beitrag haben gedankt: Nordstern