Reputation: 219
I am using Visual Studio 2015 C#, WPF/MVVM, Devexpress, EntityFramework6 and code first to Oracle database.
I have two tables in my DB (Transport and Journal) and I need to get grouped journal list by TransportID from Journal table and when add transports details to this list and then create a GridControl with these two lists. Could You please guid me, what I do wrong
First of all I created entities:
public partial class Transport
{
[Key]
public int TransportID { get; set; }
public string Brand { get; set; }
public string Model { get; set; }
public class Journal
{
[Key]
public int JournalID { get; set; }
public int TransportID { get; set; }
[ForeignKey("TransportID")]
public virtual Transport Transport { get; set; }
public DateTime JournalDate { get; set; }
}
public class JournalGrouped
{
public int JournalID { get; set; }
public int TransportID { get; set; }
public string Brand { get; set; }
public string Model { get; set; }
public DateTime JournalDate { get; set; }
public List<Journal> TransportJournal { get; set; }
}
Then in ViewModel I am constructing lists:
var journal = dbContext.Journals.AsQueryable();
var groupedList = journal.GroupBy(j => new { j.TransportID}).ToList();
var filteredList = journal.Where(j => j.TransportID.Equals(searchParam)).ToList();
groupedList results:
transport1
transport2
...
transportN
filteredlList results:
transport1 JournalDate1 Brand Model
transport2 JournalDate1 Brand Model
transport1 JournalDate2 Brand Model
transport2 JournalDate2 Brand Model
...
From these two lists, I need one in such structure:
GroupedList + FilteredList
transport1 Brand Model
journal1 JournalDate
journal2 JournalDate
...
journalN JournalDate
transport2 Brand Model
journal1 JournalDate
journal2 JournalDate
...
journalN JournalDate
...
transportN Brand Model
journal1 JournalDate
journal2 JournalDate
...
journalN JournalDate
To get GroupedList with some data I do that:
GroupedlList = new List<JournalGrouped>();
foreach (var t in groupedList)
{
Transport transportDetail = DBContext.Transports.Where(tr => tr.TransportID.Equals(t.Key.TransportID)).FirstOrDefault();
JournalGrouped journalTransport = new JournalGrouped
{
TransportID = transportDetail.TransportID,
Brand = transportDetail.BrandName,
Model = transportDetail.ModelName,
**TransportJournal** = new List<Journal>()
};
}
I don't know How to get this TransportJournal list filtered by TransportID It would be my FilteredList as a detail descriptor for my GroupedList
(If I contruct it stright from Journal by adding filter TransportID, everything is ok) I get two list, put them to two different grids in my form and everything looks nice, but I want shuch list structure as I described above
XAML code looks like this:
<dxg:GridControl x:Name="grid" ItemsSource="{Binding Path=GroupedJournalList}"
<dxg:GridControl.View>
<dxg:TableView ShowGroupPanel="False" ShowSearchPanelMode="Never" AllowGrouping="False"/>
</dxg:GridControl.View>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Brand"/>
<dxg:GridColumn FieldName="Model"/>
</dxg:GridControl.Columns>
<dxg:GridControl.DetailDescriptor>
<dxg:DataControlDetailDescriptor ItemsSourceBinding="{Binding TransportJournal}" ShowHeader="True">
<dxg:GridControl>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="JournalDate"/>
</dxg:GridControl.Columns>
</dxg:GridControl>
</dxg:DataControlDetailDescriptor>
</dxg:GridControl.DetailDescriptor>
</dxg:GridControl>
Upvotes: 0
Views: 202
Reputation:
you can use MultiBindingPropery for get currentSlected {Transport and Journal}
<MultiBinding Converter="{StaticResource "FileterName"}">
<Binding Path="CurentColumnFilter" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}" Mode="TwoWay" />
<Binding Path="TransactionTypes" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}" Mode="TwoWay"/>
for more you can refer this link https://www.devexpress.com/Support/Center/Question/Details/Q491120
Upvotes: 1