带日期选择器或文本框的过滤网格(透视)(使用SQL to LINQ,Lamda)Winforms C#.net

cetgtptt  于 2023-01-21  发布在  C#
关注(0)|答案(1)|浏览(107)

我正在将应用程序中的网格填充为透视样式。(使用SQL来LINQ和Lambda)
我正忙碌着引入过滤器文本框,当有一个正常的名称值要过滤时,它工作得很好。
我正在努力让一个筛选器工作特定于日期字段。我第一次尝试使用datetimepicker控件,无法让它工作,并开始考虑使用文本框筛选器来筛选特定的日期。
文本框过滤器部分工作。如果我输入一个部分数字,即2023或18等,它过滤网格上的值,无论是在日期或时间字段。
如果我以某种格式键入日期,网格将筛选为空白结果。使用的日期格式包括yyyy-MM-dd、yyyy/MM/dd、yyyy. MM. dd。
我似乎找不到一个适当的解决办法。
网格示例:Grid Example

private void PopulateGird()
        {

            var productivity = operationsEntities.Cases
                .Where(x => x.Case_Status == 2)
                .Where(b => b.Branches.Branch.Contains(txtBranch.Text))
                .Where(t => t.TechResource.FullName.Contains(txtResource.Text))
                .Where(s => s.StartDate.Value.ToString().Contains(txtStartDate.Text))
                .GroupBy(d => new { d.Branches.Branch, d.TechResource.FullName, d.StartDate })
                .Select(q => new
                {
                    Branch = q.Key.Branch,
                    Resource = q.Key.FullName,
                    Date = q.Key.StartDate,
                    Total = q.Where(p => p.Primary_Call > 0).Count(),
                    Installation = q.Where(p => p.Primary_Call == 1).Count(),
                    DeInstallation = q.Where(p => p.Primary_Call == 2).Count(),
                    ReInstallation = q.Where(p => p.Primary_Call == 3).Count(),
                    Repair = q.Where(p => p.Primary_Call == 4).Count()
                    
                }).ToList() ;
            
            gvProductivity.DataSource = productivity;
            gvProductivity.Columns["DeInstallation"].HeaderText = "De-Installation";
            gvProductivity.Columns["ReInstallation"].HeaderText = "Re-Installation";
            gvProductivity.Columns["Total"].HeaderText = "Total Jobs";

有人能给我指出正确的方向吗?也许我遗漏了什么(很明显)或者忘记添加什么
谢谢

fnvucqvd

fnvucqvd1#

因此,LINQ在尝试实现过滤器时根本不喜欢使用日期。我不得不在数据库中添加额外的列,其中日期被视为字符串而不是日期。添加此列后,我能够引用datetimepicker的字符串字段和字符串,并且它可以工作。可能不是最佳解决方案,但却是我需要的解决方案。
欢迎其他用户提供其他答案:D

相关问题