将DataGrid列显示为两个类的总和

本文关键字:两个 DataGrid 显示 | 更新日期: 2023-09-27 17:58:12

我有DataGrid,我想显示两个类的数据:

[DataContract]
public class File
{
    [DataMember]
    public List<FileRow> radky { get; set; }
}
public class FileRow
{
    public int AMOUNT { get; set; }
    public string NAME { get; set; } }
   //some others variables
}

[DataContract]
public class WebService
{
    [DataMember]
    public List<WSRow> radky { get; set; }
}
public class WSRow
{
    public int AMOUNT { get; set; }
    public string NAME { get; set; } }
    //some others variables
}

这两个类在NAMEAMOUNT变量中提供数据。现在,我需要在两个类中获得具有相同NAME的数据,求和它们的AMOUNT,并在DataGrid中显示。有什么办法可以做到这一点吗?我应该创建新类吗?

将DataGrid列显示为两个类的总和

您应该创建一个新类,在其中计算两个对象的amount变量的和。然后,您可以将List<SumOfAmounts>绑定到DataGrid上的ItemsSource属性。

像这样:

SumOfAmounts类别:

public class SumOfAmounts
{
    private FileRow _fileRow;
    private WSRow _webRow;
    public int Sum { get; set; }
    public SumOfAmounts(FileRow filerow, WSRow webrow)
    {
        _fileRow = filerow;
        _webRow = webrow;
        Sum = _fileRow.AMOUNT + _webRow.AMOUNT;
    }
}

在其他类中,您将存储所有的总和:

public class SumStorage
{
    // ...
    public List<SumOfAmounts> Sums { get; set; }
    // ...

    public SumStorage(File file, WebService webSvc)
    {
        Sums = new List<SumOfAmounts>();
        foreach(var row in file.radky)
        {
            var webRow = webSvc.radky.FirstOrDefault(x => x.NAME == row.NAME);
            if(webRow != null)
                Sums.Add(new SumOfAmounts(row, webRow));
        }
    }
}

现在可以将数据网格ItemsSource属性绑定到SumStorage对象上的Sums属性。

我对班级命名的想象力很有限,但我希望你能理解。此外,您应该尊重C#命名约定。