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

时间:2016-07-21 10:46:15

标签: c# wpf datagrid

我有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中显示。这有什么方法可以实现吗?我应该创建新课吗?

1 个答案:

答案 0 :(得分:1)

您应该创建一个新类,在其中计算对象的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));
        }
    }
}

现在,您可以将datagrid ItemsSource属性绑定到Sums对象上的SumStorage属性。

我的想象力对于课程命名非常有限,但我希望你明白这一点。 此外,您应该尊重C# naming conventions