这件事让我抓狂。。。我有日期/时间列,我想按日期/时间排序,但过滤时,只按日期/时间的日期部分过滤。我的筛选代码(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
,工作正常,但排序是疯狂的。所以,排序为日期/时间,过滤为字符串将是我想要的,但似乎不能把两者结合在一起。