【发布时间】:2011-11-25 08:16:29
【问题描述】:
我有一个绑定到数据库表的数据网格。我可以使用下面的代码使用 ICollectionView 过滤数据网格:
lstOrdsRlsd = new ObservableCollection<OrdsRlsd>(GV.dbContext.OrdsRlsds);
view = CollectionViewSource.GetDefaultView(lstOrdsRlsd);
if (lstOrdsRlsd.Count > 0)
{
dgRecords1.ItemsSource = view;
}
private void FilterRecords(string FieldName, string Condition, object Value1, object Value2)
{
OrdsRlsd vitem;
switch (FieldName)
{
case "OrderNo":
view.Filter = item =>
{
vitem = item as OrdsRlsd;
switch (Condition)
{
case "=":
if (vitem.OrderNo == Convert.ToDouble(Value1))
return true;
break;
case ">=":
if (vitem.OrderNo >= Convert.ToDouble(Value1))
return true;
break;
case "<=":
if (vitem.OrderNo <= Convert.ToDouble(Value1))
return true;
break;
case "between":
if (vitem.OrderNo >= Convert.ToDouble(Value1) && vitem.OrderNo <= Convert.ToDouble(Value2))
return true;
break;
}
return false;
};
break;
case "DateRqd1":
view.Filter = item =>
{
vitem = item as OrdsRlsd;
switch (Condition)
{
case "=":
if (vitem.DateRqd1 == Convert.ToDateTime(Value1))
return true;
break;
case ">=":
if (vitem.DateRqd1 >= Convert.ToDateTime(Value1))
return true;
break;
case "<=":
if (vitem.DateRqd1 <= Convert.ToDateTime(Value1))
return true;
break;
case "between":
if (vitem.DateRqd1 >= Convert.ToDateTime(Value1) && vitem.DateRqd1 <= Convert.ToDateTime(Value2))
return true;
break;
}
return false;
};
break;
}
当只有一个过滤条件时,它适用于我。但是当我应用多个条件时,数据网格会按最后一个条件过滤。这是用户点击过滤按钮时执行的代码。
private void BtnFilter_Click(object sender, RoutedEventArgs e)
{
foreach (var rec in lstClsFilterGrid)
{
FilterRecords(rec.FieldName, rec.Condition, rec.Value1, rec.Value2);
}
}
其中 lstClsFilterGrid 是具有过滤条件的类对象的列表。
我附上我的表单截图。
【问题讨论】: