为了账号安全,请及时绑定邮箱和手机立即绑定

按隐藏属性对数据网格条目进行分组

按隐藏属性对数据网格条目进行分组

C#
杨__羊羊 2022-10-23 16:28:52
我有以下数据结构:public class TimeData{    public Employee Employee { get; set; }    public IList<WorkTime> WorkTimes { get; set; }}视图模型:public ObservableCollection<TimeData> TimeDatas { get; set; }在我的数据网格中,我想显示所有工作时间。按员工分组。像这样:日期 | 小时 | 时间码乔恩·多伊19 年 12 月 3 日 | 8 | 43319 年 3 月 13 日 | 8 | 43319 年 3 月 14 日 | 5 | 546迈克·穆斯特19 年 12 月 3 日 | 4 | 65319 年 3 月 13 日 | 3 | 43319 年 3 月 14 日 | 9 | 546public class Employee{    public string FirstName { get; set; }    public string LastName { get; set; }}public class WorkTime{    public DateTime Date { get; set; }    public double Hours { get; set; }    public string TimeCode { get; set; }}我已经尝试过以下代码:ListCollectionView collectionView = new ListCollectionView(this.viewModel.TimeDatas);collectionView.GroupDescriptions.Add(new PropertyGroupDescription("Employee"));this.grdTimeData.ItemsSource = collectionView;这按员工分组,但不显示 WorkTimes 列表:在网格行中,我只需要 WorkTimes,Employee 仅用于分组。
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

您需要将数据转换为DataGrid可以处理的格式。创建一个包含所有属性的视图模型类:


public class EmployeeAndWorkTime

{

    public string Name { get; set; }

    public DateTime Date { get; set; }

    public double Hours { get; set; }

    public string TimeCode { get; set; }

}

...并绑定到IEnumerable<EmployeeAndWorkTime>您从现有TimeDatas集合创建的:


TransformedTimeDatas = TimeDatas.Select(timeData =>

{

    EmployeeAndWorkTime[] viewModels = new EmployeeAndWorkTime[timeData.WorkTimes.Count];

    for (int i = 0; i < timeData.WorkTimes.Count; ++i)

        viewModels[i] = new EmployeeAndWorkTime()

        {

            Name = string.Format("{0} {1}", timeData.Employee.FirstName, timeData.Employee.LastName),

            Date = timeData.WorkTimes[i].Date,

            Hours = timeData.WorkTimes[i].Hours,

            TimeCode = timeData.WorkTimes[i].TimeCode

        };

    return viewModels;

}).ToArray();


ListCollectionView collectionView = new ListCollectionView(TransformedTimeDatas);

collectionView.GroupDescriptions.Add(new PropertyGroupDescription("Name"));

this.grdTimeData.ItemsSource = collectionView;


查看完整回答
反对 回复 2022-10-23
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号