首页 > 解决方案 > 我想在同一个数据网格上使用两个可观察的集合

问题描述

我正在处理一个项目的报告。我正在创建利润报告。在这里,我必须列出销售详细信息和销售退货详细信息。它们来自不同的类,因此它们是两个不同的可观察集合。我想先列出销售详细信息,完成销售后再列出销售退货。我希望在单个数据网格上完成

我已经使用数据网格名称和项目源进行了尝试,但仅列出了销售退货

AllSalesProfitList = new ObservableCollection<SalesInvoice>(SalesInvoice.GetAllSalesProfitList(SelectQuerySales));

if (AllSalesProfitList.Count > 0)
{
    ReportContainer.Visibility = Visibility.Visible;
    ListSalesReportView.ItemsSource = AllSalesProfitList;

    LabelTotalSalesAmountValue.Content = AllSalesProfitList.Sum(p => p.TotalSalesAmount);
}
else
{
    NoRecordCheck();
}

AllSalesReturnProfitList = new ObservableCollection<SalesReturnInvoice>(SalesReturnInvoice.GetAllSalesReturnProfitList(SelectQuerySalesReturn));

if (AllSalesReturnProfitList.Count > 0)
{
    ReportContainer.Visibility = Visibility.Visible;
    ListSalesReportView.ItemsSource = AllSalesReturnProfitList;

    LabelTotalSalesReturnAmountValue.Content = AllSalesReturnProfitList.Sum(p => p.TotalSalesReturnAmount);
}
else
{
    NoRecordCheck();
}

预期结果

它应该首先列出所有销售,然后是销售退货。

实际结果

仅列出销售退货。

标签: c#wpfdatagridcode-behind

解决方案


CompositeCollection是可以解决问题的类。确实它

允许将多个集合和项目显示为单个列表。

所以你的代码将(或多或少)

CompositeCollection compositeCollection = new CompositeCollection();
CollectionContainer cc1 = new CollectionContainer();
cc1.Collection = AllSalesProfitList;
CollectionContainer cc2 = new CollectionContainer();
cc2.Collection = AllSalesReturnProfitList;

compositeCollection.Add(cc1);
compositeCollection.Add(cc2);

ListSalesReportView.ItemsSource = compositeCollection;

我希望它可以帮助你。


推荐阅读