c# - SPGridView 中日期/时间的 ObjectDataSource 过滤

标签 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] >= '8/5/2010') AND ([客户证明] < '8/6/2010')".

现在是关键,它在我的开发环境(Win2K3 32 位,MOSS 2K7)中工作,但是一旦我将解决方案提升到 QC 环境(Win2K8R2 64 位,MOSS 2K7),执行相同的过滤器导致空网格。 有没有人有任何想法?还是查看应用过滤器时实际发生的情况的好方法?谢谢!

预计到达时间:

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

最佳答案

我想了想。您能否生成一个仅包含完整 DateTime 列中的日期部分的新列?然后,您可以将过滤器应用于仅包含日期部分的列。

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

附言不确定为什么它在一个环境中工作而不在另一个环境中工作。我猜是数据问题/差异。

关于c# - SPGridView 中日期/时间的 ObjectDataSource 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3859719/

相关文章:

javascript - 获取 ASP 文本框的更改值

c# - 您可以为 MSTest 运行配置设置临时环境变量吗?

c# - Sharepoint 项目文件替换

.net - T4MVC 异步 Controller

c# - 项目添加事件接收器共享点 2010

visual-studio - 应如何管理共享彼此代码的 SharePoint Visual Studio 项目?

c# - 添加新的 XML 元素并仍然读取旧版本的 XML 文档

c# - 获取组件的父表单

c# - 使用经过测试的内部方法对公共(public)方法进行单元测试

c# - String.Trim() 删除的所有字符的列表?