代码之家  ›  专栏  ›  技术社区  ›  Jesse C. Slicer

在SPGridView中按日期/时间筛选ObjectDataSource

  •  2
  • Jesse C. Slicer  · 技术社区  · 14 年前

    这件事让我抓狂。。。我有日期/时间列,我想按日期/时间排序,但过滤时,只按日期/时间的日期部分过滤。我的筛选代码(setup方法中包含的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')和([Client-Proof]<'8/6/2010')”。

    有人有什么想法吗?或者一个很好的方法来看看当过滤器被应用时实际发生了什么?谢谢!

    预计到达时间:

    Filtering 事件的筛选器格式 [{1}] = '{0}' 已经被申请了,我现在做的一切都没用。以前的开发人员将日期视为字符串并使用 LIKE ,工作正常,但排序是疯狂的。所以,排序为日期/时间,过滤为字符串将是我想要的,但似乎不能把两者结合在一起。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Kit Menke    14 年前

    过了一会儿我想到了一件事。能否生成一个只包含full DateTime列中日期部分的新列?然后,将过滤器应用于只包含日期部分的列。

    你可以试着设置 BoundField.DataField 转到DateOnly列。

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

    推荐文章