1
我有一個數據表,這是一個數據庫表的數據網。我可以過濾使用下面的代碼使用ICollectionView中數據網格:使用C#應用多個過濾WPF數據網格
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是具有過濾條件的類對象的列表。
我附上我的表單的屏幕截圖。