У меня есть сетка данных, которая boud к таблице базы данных. Я мог бы отфильтровать сетку данных, используя 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 - список объектов класса с условиями фильтра.
Я прилагаю скриншот моей формы.