我正在抓住这个...我有日期/时间列,我想按日期/时间排序,但过滤后,只按日期/时间的日期部分过滤。我的过滤器代码(设置方法中包含的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),执行相同的过滤器导致空格。有没有人有任何想法?或者是一个很好的方法来查看应用过滤器时实际发生了什么?谢谢!
事实证明,当它到达Filtering
事件时,[{1}] = '{0}'
的过滤格式已经应用,我正在做的所有事情都没有做任何事情。之前的开发人员将日期视为一个字符串并使用LIKE
,这可以正常工作,但随后排序是疯狂的。因此,排序为日期/时间并像字符串一样过滤将是我想要的,但似乎无法将两者结合在一起。
答案 0 :(得分:1)
过了一会儿,我想到了什么。你能生成一个只包含完整DateTime列中日期部分的新列吗?然后,您将过滤器应用于仅包含日期部分的列。
您可以尝试将BoundField.DataField
设置为DateOnly列。
P.S。不确定为什么它在一个环境中工作而在另一个环境中工作。我猜测数据有问题/差异。