ObjectDataSource在SPGridView中过滤日期/时间

时间:2010-10-04 22:46:10

标签: c# .net sharepoint moss sharepoint-2007

我正在抓住这个...我有日期/时间列,我想按日期/时间排序,但过滤后,只按日期/时间的日期部分过滤。我的过滤器代码(设置方法中包含的lambda)如下所示:

        this.taskGrid.AllowFiltering = true;
        this.odsGrid.Filtering += (sender, e) =>
        {
            var odsv = (ObjectDataSourceView)sender;
            var filterExp = odsv.FilterExpression;

            if (filterExp.Contains("Date")
                || filterExp.Contains("Deadline")
                || filterExp.Contains("Client Proof"))
            {
                var fieldAndVal = filterExp.Split('=');
                DateTime date;

                if (DateTime.TryParse(fieldAndVal[1].Replace("'", string.Empty), out date))
                {
                    odsv.FilterExpression = "("
                        + fieldAndVal[0] + " >= '" + date
                        + "') AND ("
                        + fieldAndVal[0] + " < '" + date.AddDays(1) + "')";
                }
            }

            this.ViewState["FilterExpression"] = odsv.FilterExpression;
        };

所以这样做会改变一个表达式,看起来像“[Client Proof] ='8/5/2010 4:24:44 PM'”并将其重写为“([Client Proof]&gt; ='8 / 5/2010')和([客户证明]&lt;'8/6/2010')“。

现在这里是踢球者,它适用于我的开发环境(Win2K3 32位,MOSS 2K7)但是一旦我将解决方案推广到QC环境(Win2K8R2 64位,MOSS 2K7),执行相同的过滤器导致空格。有没有人有任何想法?或者是一个很好的方法来查看应用过滤器时实际发生了什么?谢谢!

ETA:

事实证明,当它到达Filtering事件时,[{1}] = '{0}'的过滤格式已经应用,我正在做的所有事情都没有做任何事情。之前的开发人员将日期视为一个字符串并使用LIKE,这可以正常工作,但随后排序是疯狂的。因此,排序为日期/时间并像字符串一样过滤将是我想要的,但似乎无法将两者结合在一起。

1 个答案:

答案 0 :(得分:1)

过了一会儿,我想到了什么。你能生成一个只包含完整DateTime列中日期部分的新列吗?然后,您将过滤器应用于仅包含日期部分的列。

您可以尝试将BoundField.DataField设置为DateOnly列。

P.S。不确定为什么它在一个环境中工作而在另一个环境中工作。我猜测数据有问题/差异。