0

私は Visual Studio 2015 C#、WPF/MVVM、Devexpress、EntityFramework6、およびコードを最初に Oracle データベースに使用しています。

DB (トランスポートとジャーナル) に 2 つのテーブルがあり、ジャーナル テーブルから TransportID によってグループ化されたジャーナル リストを取得し、このリストにトランスポートの詳細を追加してから、これら 2 つのリストを使用して GridControl を作成する必要があります。私が間違っていることを教えてください

まず、エンティティを作成しました。

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; }
    }

次に、ViewModel でリストを作成しています。

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 の結果:

transport1
transport2
...
transportN

フィルタリングされたリストの結果:

transport1 JournalDate1 Brand Model
transport2 JournalDate1 Brand Model
transport1 JournalDate2 Brand Model
transport2 JournalDate2 Brand Model
...

これら 2 つのリストから、次のような構造のリストが必要です。

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

いくつかのデータで GroupedList を取得するには、次のようにします。

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>()

                        };
            }

このTransportJournalリストを TransportID でフィルタリングする方法がわかりません。これは、GroupedList の詳細記述子としての FilteredList になります。

(フィルター TransportID を追加して Journal から直接構築すれば、すべて問題ありません) 2 つのリストを取得し、それらをフォームの 2 つの異なるグリッドに配置すると、すべてが見栄えがよくなりますが、上で説明したようなリスト構造が必要です。

XAML コードは次のようになります。

<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>
4

1 に答える 1

1

get currentSelected {Transport and Journal} に MultiBindingPropery を使用できます

<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"/>


詳細については、このリンクを参照できます https://www.devexpress.com/Support/Center/Quest/Details/Q491120

于 2016-06-26T07:48:19.873 に答える