【问题标题】:WPF display record weekly wise in Datagrid with Summary [closed]WPF在Datagrid中每周显示记录并带有摘要[关闭]
【发布时间】:2020-05-17 22:14:23
【问题描述】:

我有一个时间表数据,其数据模型定义为

public class Timesheet
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Effort { get; set; }
    public DateTime Day { get; set; }
}

我的挑战是以周的格式显示记录。但是,我不确定设计 Datagrid 的最佳方法是什么,当列表与它绑定时,也会显示每列的总摘要。

【问题讨论】:

  • 尝试分组如下: List times = new List(); var week = times.GroupBy(x => new { week = x.Day.Date.AddDays(-1 * (int)x.Day.DayOfWeek), name = x.Name }).ToList();
  • 这是一个有趣的代码,我真的很感激。谢谢
  • 您可能想先按星期几分组。然后按任务名称分组。

标签: c# .net wpf datagrid


【解决方案1】:

查看以下代码以逐步查看结果

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
    public class Timesheet
    {
        private static List<Timesheet> timeSheets { get; set; }
        private static List<KeyValuePair<DateTime, List<Timesheet>>> weeks { get; set; }

        private int index { get; set; }

        public int Id { get; set; }
        public string Name { get; set; }
        public int Effort { get; set; }
        public DateTime Day { get; set; }

        public void AddTimeSheets(List<Timesheet> timesheets)
        {
            Timesheet.timeSheets = timesheets;
            weeks = timesheets
                .OrderBy(x => x.Day)
                .GroupBy(x => x.Day.Date.AddDays(-1 * (int)x.Day.DayOfWeek)).Select(x => new KeyValuePair<DateTime, List<Timesheet>>(x.Key, new List<Timesheet>(x.ToList()))).ToList();

            index = 0;
        }

        public KeyValuePair<object, List<KeyValuePair<string, int[]>>> Current()
        {
            if (weeks.Count() == 0)
            {
                return new KeyValuePair<object, List<KeyValuePair<string, int[]>>>();
            }
            else
            {
                return new KeyValuePair<object, List<KeyValuePair<string, int[]>>>(weeks[index].Key, GetWeek(weeks[index].Value));
            }
        }
        public KeyValuePair<object, List<KeyValuePair<string, int[]>>> Next()
        {
            if (index >= weeks.Count() - 1)
            {
                return new KeyValuePair<object, List<KeyValuePair<string, int[]>>>();
            }
            else
            {
                index++;
                return new KeyValuePair<object, List<KeyValuePair<string, int[]>>>(weeks[index].Key, GetWeek(weeks[index].Value));
            }
        }
        public KeyValuePair<object, List<KeyValuePair<string, int[]>>> Previous()
        {
            if (index <= 0)
            {
                return new KeyValuePair<object, List<KeyValuePair<string, int[]>>>();
            }
            else
            {
                index--;
                return new KeyValuePair<object, List<KeyValuePair<string, int[]>>>(weeks[index].Key, GetWeek(weeks[index].Value));
            }
        }
        public List<KeyValuePair<string, int[]>> GetWeek(List<Timesheet> week)
        {
            List<KeyValuePair<string, int[]>> results = new List<KeyValuePair<string, int[]>>();

            var summary = week
                .GroupBy(x => x.Name)
                .ToList();

            foreach (var name in summary)
            {
                int[] effort = new int[7];
                foreach (var day in name)
                {
                    effort[(int)day.Day.DayOfWeek] += day.Effort;
                }
                results.Add(new KeyValuePair<string, int[]>(name.Key, effort));
            }
            return results;
        }
    }

}

【讨论】:

  • 我做了一些小改动。我删除了一个额外的索引++。还制作了两个变量时间表和周静态以减少内存。最初我也担心它们可能是同一天的两个时间表,所以我做了一组额外的分组。我发现如果我将努力添加为 '+=' 是没有必要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2012-07-08
  • 1970-01-01
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多