2014-01-23 39 views
0

我遇到了一些麻煩,試圖爲我的DataGridView創建各種過濾器。 基本上我有4個按鈕,分別是'今天','本週','本月','今年'和'全部顯示'。 當我點擊任何按鈕時,我希望能夠只顯示與按下按鈕相關的行。日期的數據以下列格式存儲:「YYYY-MM-DDT00:00:00」,包括破折號和冒號。BindingSource過濾 - C#WPF

使用我的BindingData如何正確過濾給定格式的條目?如果您需要任何代碼,請告訴我。

+0

爲什麼日期/時間數據存儲爲文本?如果它實際上是二進制日期/時間,但想要做的事情會很容易,但是通過錯誤地存儲數據使得使用它很困難。數據存儲在您的控制範圍內的方式是什麼?順便說一句,你的標題說WPF,但你聲稱使用DataGridView,這是一個WinForms控件。那是怎麼回事? – jmcilhinney

+0

我對標題的錯誤,當我發送這封郵件時已經很晚了,是的,存儲日期和時間的方式超出了我的控制範圍。 – Clarke

回答

0

您可以使用CollectionView和CollectionViewSource來過濾數據。你可以參考MSDN。 How to: Group, Sort, and Filter Data in the DataGrid Control

希望它能幫助你。

要對DataGrid中的數據進行分組,排序和過濾,請將其綁定到支持這些功能的CollectionView。然後,您可以使用CollectionView中的數據,而不會影響底層的源數據。 DataGrid用戶界面(UI)中反映了集合視圖中的更改。 CollectionView類爲實現IEnumerable接口的數據源提供了分組和排序功能。 CollectionViewSource類使您能夠從XAML設置CollectionView的屬性。

+0

我會研究這個,謝謝你的帖子。 – Clarke

0

我設法實現了我一直在尋找的東西,我不知道這是否是最好的方法。 (!我敢肯定有更好的方法,因此,如果有,請讓我知道,我想在這裏學習)

這裏是我的代碼片段顯示我想要實現:

private void todayToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     DataView dv = _dataSource.Tables[0].DefaultView; //have a temp dataview to filter data in 
     DateTime date = new DateTime(); 
     date = DateTime.Today; 

     string expression = date.Year.ToString() + "-" + 
      date.Month.ToString() + "-" + date.Day.ToString(); 



     dv.RowFilter = string.Format("thedate = #{0}#", expression); 
     _tableNameBS.DataSource = dv; 

     dataGridView1.DataSource = _tableNameBS; 
    } 

_tableNameBS是一個BindingSource,所以現在要刪除另一個函數中的過濾器,我需要調用的是'_tableNameBS.RemoveFilter',並將其恢復爲原始。