Songaila
Songaila

Reputation: 219

Detailed grid in my WPF/MVVM form with data from grouped LINQ query

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

Answers (1)

user6426615
user6426615

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

Related Questions