Benutzer mit den meisten Antworten
WCF RIA: Query von mehrern Tables (DataGrid)

Frage
-
Hallo liebe Community!
Ich habe ein DataGrid mit vier Spalten (Norm, Bereich, Gruppe, Frage) und möchte in jede Spalte einen Wert aus einer unterschiedlichen Tabelle in der DB.
Die Hierarchie sieht folgendermaßen aus:
Frage
Gruppe
Bereich
Norm
(Jede Frage gehört zu einer Gruppe, jede Gruppe gehört zu einem Bereich,...)
Jeder dieser Tables hat eine Spalte "Bezeichnung" und diese Bezeichnungen möchte ich im DataGrid darstellen.
Mein bisheriger (fehlerhafter) Query:
return this.ObjectContext.Frage.Include("Gruppe")
.Include("Gruppe.Bereich")
.Include("Gruppe.Bereich.Norm");ebenso fehlerhafter Query:
return (from f in this.ObjectContext.Frage
join g in this.ObjectContext.Gruppe on f.GID equals g.GID
join b in this.ObjectContext.Bereich on g.UBID equals b.UBID
join n in this.ObjectContext.Norm on b.EBID equals n.EBID
join ff in this.ObjectContext.FrageFunktion on f.FRID equals ff.FRID
join fk in this.ObjectContext.Funktion on ff.FKID equals fk.FKID
join pf in this.ObjectContext.PersonFunktion on fk.FKID equals pf.FKID
join p in this.ObjectContext.Person on pf.PID equals p.PID
where p.PID == PID
select f);Mein DataGrid sieht folgendermaßen aus:
<sdk:DataGrid AutoGenerateColumns="False" Grid.Row="1" Name="dgFragen" >
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Norm" Binding="{Binding Norm.nBez}"/>
<sdk:DataGridTextColumn Header="Bereich" Binding="{Binding Bereich.bBez}"/>
<sdk:DataGridTextColumn Header="Gruppe" Binding="{Binding Gruppe.gBez}"/>
<sdk:DataGridTextColumn Header="Frage" Binding="{Binding fBez}"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>Wie bekomme ich die verschiedenen Spalten in ein DataGrid?
Danke im Voraus,
MaxM
Samstag, 18. Mai 2013 16:32
Antworten
-
Hallo MaxM,
Schau Dir mal folgende Beispiele an http://www.codeproject.com/Articles/180646/Performing-CRUD-operations-on-Relational-Data-Mult
Ionut
- Als Antwort markiert MaxMachete Donnerstag, 30. Mai 2013 22:54
Montag, 20. Mai 2013 13:09
Alle Antworten
-
Hallo MaxM,
Schau Dir mal folgende Beispiele an http://www.codeproject.com/Articles/180646/Performing-CRUD-operations-on-Relational-Data-Mult
Ionut
- Als Antwort markiert MaxMachete Donnerstag, 30. Mai 2013 22:54
Montag, 20. Mai 2013 13:09 -
Hi,wenn Du die Expand-Methode nutzt, werden die Kindelemente auch geladen, z.B. so:frageCollection.LoadAsync(Ctx.Frage.Expand("Gruppe"));Entsprechend müssten dann auch die Grandchilds geladen werden.--
Peter Fleischer- Als Antwort vorgeschlagen Peter Fleischer Montag, 20. Mai 2013 19:32
Montag, 20. Mai 2013 19:23 -
Hallo liebe Community!
Ich habe eine neue Methode in meinem DomainService hinzugefügt.
public IQueryable<FragenPersonen> GetFragenPersonenById(Guid PID) { return (from f in this.ObjectContext.Frage join g in this.ObjectContext.Gruppe on f.GID equals g.GID join b in this.ObjectContext.Bereich on g.UBID equals b.UBID join n in this.ObjectContext.Norm on b.EBID equals n.EBID join ff in this.ObjectContext.FrageFunktion on f.FRID equals ff.FRID join fk in this.ObjectContext.Funktion on ff.FKID equals fk.FKID join pf in this.ObjectContext.PersonFunktion on fk.FKID equals pf.FKID join p in this.ObjectContext.Person on pf.PID equals p.PID where p.PID == PID select new FragenPersonen() { FRID=f.FRID, nBez=n.nBez, bBez=b.bBez, gBez=g.gBez, fBez=f.fBez }); }
Dazu habe ich eine neue Klasse (PersonenFragen) im Web-Projekt erstellt, welche die gemischten Resultate speichert. So sieht die aus:
public class FragenPersonen { [Key] public Guid FRID { get; set; } public string nBez { get; set; } public string bBez { get; set; } public string gBez { get; set; } public string fBez { get; set; } }
Wenn ich diese neue Methode aufrufe, zeigt das DataGrid _nichts_ mehr an.
Voher wurden zumindest schon die Bezeichnungen der Tabellen "Frage" und "Gruppe" angezeigt.
@Peter Fleischer: Diesen Ansatz kann ich nicht nachvollziehen. Mein DomainService bietet keine Expand()-Methode.
Danke im Voraus!!
- Als Antwort vorgeschlagen Peter Fleischer Dienstag, 28. Mai 2013 05:56
Freitag, 24. Mai 2013 18:34 -
Hi,ich bin bei meiner Antwort davon ausgegangen, dass Du einen WcfDataService nutzt. Damit reduziert sich die Abfrage auf einen clientseitigen Construct, z.B. so in VB.NET:''' <summary>''' Ansicht aller Fragen''' Wenn noch nicht geladen, dann das Laden starten''' </summary>''' <value></value>''' <returns></returns>''' <remarks></remarks>Public ReadOnly Property View1 As ICollectionViewGetIf Ctx IsNot Nothing AndAlso cvs1.View Is Nothing Thencol1 = New DataServiceCollection(Of Frage)col1.LoadAsync(Ctx.Frage.Expand("Gruppe"))End IfReturn cvs1.ViewEnd GetEnd Property''' <summary>''' Laden der Fragen abgeschlossen''' </summary>''' <param name="sender"></param>''' <param name="e"></param>''' <remarks></remarks>Private Sub col1_LoadCompleted(sender As Object, e As LoadCompletedEventArgs) Handles col1.LoadCompletedcvs1.Source = From itm1 In col1 _From itm2 In itm1.Gruppe _Select New Helper With {.Frage = itm1.fBez, .Gruppe = itm2.gBez}OnPropertyChanged("View1")End Sub--
Peter Fleischer- Als Antwort vorgeschlagen Peter Fleischer Dienstag, 28. Mai 2013 05:58
Samstag, 25. Mai 2013 17:46