Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# iptor { Member=filter.Member, MemberType=filter.MemberType, Operator=FilterOperator.Is大于或等于, 值=下限 }); newFilter.FilterDescriptors.Add(新建FilterDescriptor { Member=filter.Member, MemberType=filter.MemberType, Operator=FilterOperator.IsLessThan, 值=上限 }); request.Filters[i]=newFilter; } } 返回请求; } }_C#_.net_Asp.net Mvc 3_Kendo Grid_Datetimepicker - Fatal编程技术网

C# iptor { Member=filter.Member, MemberType=filter.MemberType, Operator=FilterOperator.Is大于或等于, 值=下限 }); newFilter.FilterDescriptors.Add(新建FilterDescriptor { Member=filter.Member, MemberType=filter.MemberType, Operator=FilterOperator.IsLessThan, 值=上限 }); request.Filters[i]=newFilter; } } 返回请求; } }

C# iptor { Member=filter.Member, MemberType=filter.MemberType, Operator=FilterOperator.Is大于或等于, 值=下限 }); newFilter.FilterDescriptors.Add(新建FilterDescriptor { Member=filter.Member, MemberType=filter.MemberType, Operator=FilterOperator.IsLessThan, 值=上限 }); request.Filters[i]=newFilter; } } 返回请求; } },c#,.net,asp.net-mvc-3,kendo-grid,datetimepicker,C#,.net,Asp.net Mvc 3,Kendo Grid,Datetimepicker,备注: DateTime截断器扩展基于 此方法仅在运算符为等于时才执行任何操作,因为如果选择“晚于”或类似选项,则默认行为也会起作用 此方法不关心任何现有的CompositeFilterDescriptors,因为表达式dateToSearch=2016-11-21 11:22:00和dateToSearch=2016-11-21 11:59:00毫无意义 对于DateTimeOffset值,也可以执行类似的操作 对的增强,假设您使用的是DateTime的简单日期部分,而根本不关心时间部分。处

备注:

  • DateTime
    截断器扩展基于
  • 此方法仅在运算符为
    等于
    时才执行任何操作,因为如果选择“晚于”或类似选项,则默认行为也会起作用
  • 此方法不关心任何现有的
    CompositeFilterDescriptor
    s,因为表达式
    dateToSearch=2016-11-21 11:22:00和dateToSearch=2016-11-21 11:59:00
    毫无意义
  • 对于
    DateTimeOffset
    值,也可以执行类似的操作
对的增强,假设您使用的是
DateTime
的简单日期部分,而根本不关心时间部分。处理与其他不相关的过滤器一起过滤也是递归的

public static IList<IFilterDescriptor> NormalizeDateFilters(this IList<IFilterDescriptor> filters)
{
    for (var i = 0; i < filters.Count; i++)
    {
        if (filters[i] is CompositeFilterDescriptor compositeFilterDescriptor)
        {
            compositeFilterDescriptor.FilterDescriptors.NormalizeDateFilters();
        }
        else if (filters[i] is FilterDescriptor filterDescriptor &&
                 filterDescriptor.ConvertedValue is DateTime &&
                 filterDescriptor.Operator == FilterOperator.IsEqualTo)
        {
            var value = DateTime.Parse(filterDescriptor.Value.ToString());
            var start = value.Date;
            var end = start.AddDays(1);

            var newFilter = new CompositeFilterDescriptor
            {
                LogicalOperator = FilterCompositionLogicalOperator.And
            };

            newFilter.FilterDescriptors.Add(new FilterDescriptor
            {
                Member = filterDescriptor.Member,
                MemberType = filterDescriptor.MemberType,
                Operator = FilterOperator.IsGreaterThanOrEqualTo,
                Value = start
            });

            newFilter.FilterDescriptors.Add(new FilterDescriptor
            {
                Member = filterDescriptor.Member,
                MemberType = filterDescriptor.MemberType,
                Operator = FilterOperator.IsLessThan,
                Value = end
            });
            filters[i] = newFilter;
        }
    }
    return filters;
}
公共静态IList规范化数据过滤器(此IList过滤器)
{
对于(var i=0;i
非常感谢。它解决了我在date和datetime列的情况下的问题,但我仍然有问题,如果我在剑道网格中有时间列。嗨,如何对这个类进行单元测试?我不知道如何模拟它并在测试中使用。您的代码对我帮助很大;)
<script type="text/javascript">
  function DateTimeFilter(control) 
  {
    $(control).kendoDateTimePicker();
  }
</script>
function DateTimeFilter(control) 
{
   $(control).kendoDateTimePicker({
      format: "MM/dd/yyyy HH:mm:ss",
      timeFormat: "HH:mm:ss"
   });
}
public static class KendoHelpers
{
    public enum DateTimePrecision
    {
        Seconds = 1,
        Minutes = 2,
        Hours = 4
    }

    public static DataSourceRequest NormalizeDateFilters(this DataSourceRequest request, DateTimePrecision precision)
    {
        // TODO: Add parameter validation.

        for (int i = 0; i < request.Filters.Count; ++i)
        {
            FilterDescriptor filter = request.Filters[i] as FilterDescriptor;
            if (filter != null && filter.ConvertedValue is DateTime && filter.Operator == FilterOperator.IsEqualTo)
            {
                DateTime val = (DateTime)filter.ConvertedValue;

                CompositeFilterDescriptor newFilter = new CompositeFilterDescriptor
                {
                    LogicalOperator = FilterCompositionLogicalOperator.And
                };

                DateTime lowerBound;
                DateTime upperBound;

                if (precision == DateTimePrecision.Seconds)
                {
                    lowerBound = val.TruncateToWholeSeconds();
                    upperBound = lowerBound.AddSeconds(1);
                }
                else if (precision == DateTimePrecision.Minutes)
                {
                    lowerBound = val.TruncateToWholeMinutes();
                    upperBound = lowerBound.AddMinutes(1);
                }
                else if (precision == DateTimePrecision.Hours)
                {
                    lowerBound = val.TruncateToWholeHours();
                    upperBound = lowerBound.AddHours(1);
                }
                else
                {
                    // If someone would be stupid enough to supply Hours | Minutes
                    throw new ArgumentException("Not supported precision. Only Second, Minute, Hour values are supported.", "precision");
                }

                newFilter.FilterDescriptors.Add(new FilterDescriptor
                {
                    Member = filter.Member,
                    MemberType = filter.MemberType,
                    Operator = FilterOperator.IsGreaterThanOrEqualTo,
                    Value = lowerBound
                });

                newFilter.FilterDescriptors.Add(new FilterDescriptor
                {
                    Member = filter.Member,
                    MemberType = filter.MemberType,
                    Operator = FilterOperator.IsLessThan,
                    Value = upperBound
                });

                request.Filters[i] = newFilter;
            }
        }

        return request;
    }
}
public static IList<IFilterDescriptor> NormalizeDateFilters(this IList<IFilterDescriptor> filters)
{
    for (var i = 0; i < filters.Count; i++)
    {
        if (filters[i] is CompositeFilterDescriptor compositeFilterDescriptor)
        {
            compositeFilterDescriptor.FilterDescriptors.NormalizeDateFilters();
        }
        else if (filters[i] is FilterDescriptor filterDescriptor &&
                 filterDescriptor.ConvertedValue is DateTime &&
                 filterDescriptor.Operator == FilterOperator.IsEqualTo)
        {
            var value = DateTime.Parse(filterDescriptor.Value.ToString());
            var start = value.Date;
            var end = start.AddDays(1);

            var newFilter = new CompositeFilterDescriptor
            {
                LogicalOperator = FilterCompositionLogicalOperator.And
            };

            newFilter.FilterDescriptors.Add(new FilterDescriptor
            {
                Member = filterDescriptor.Member,
                MemberType = filterDescriptor.MemberType,
                Operator = FilterOperator.IsGreaterThanOrEqualTo,
                Value = start
            });

            newFilter.FilterDescriptors.Add(new FilterDescriptor
            {
                Member = filterDescriptor.Member,
                MemberType = filterDescriptor.MemberType,
                Operator = FilterOperator.IsLessThan,
                Value = end
            });
            filters[i] = newFilter;
        }
    }
    return filters;
}