我正在寻找一种解决方案,通过比x天更早的日期时间字段1过滤数据网格视图,其中x是同一行中类型为short的另一个字段2。在sql中,可能的语法是:
field1 < DATEADD(day, field2, GETDATE())
但我必须使用BindingSource的“过滤器”属性 DataGridView绑定到BindingSource,源绑定到从SQL数据库填充的DataTable。
答案 0 :(得分:0)
你绑定到DataGridView是什么?怎么样?
如果您在代码隐藏中绑定它并且您的DataSource是DateTimes列表:
List<DateTime> dtList; //list with datetimes
dtList.Where( a => DateTime.Now.Subtract(a) > TimeSpan.FromDays(1));
//More than 1 day ago
如果您需要更准确的帮助,请提供代码的更多信息和代码段。
编辑1:
如果您使用的是具有日期时间属性的自定义类型:
List<CustomObject> objList; //list with Custom objects
objList.Where( a => DateTime.Now.Subtract(a.dateTimePropertyName) > TimeSpan.FromDays(1))
.Where(a => a.otherPropertyName == "ExampleValue");
DateGridViewName.DataContext = objList;
答案 1 :(得分:0)
这将对静态数据起作用......
DataTable filtered = dt.AsEnumerable().Where(
x => x.Field<DateTime>("field1") < DateTime.Today.AddDays(x.Field<int>("field2"))).
CopyToDataTable();
bindingSource1.DataSource = filtered;
但是,如果我理解你想要的东西(数据绑定),虽然可能是一种在DataTable中实现它的方法,但它听起来像是域对象的工作。
class BoundDataObject
{
public DateTime Field1 { get; set; }
public short Field2 { get; set; }
public bool PassFail
{
get { return Field1 < DateTime.Now.AddDays(Field2); }
}
}
将数据加载到域对象可能比数据表稍微多一些,但这只是一次性成本,我认为你会很快获得好处。