2012-11-07 297 views
4

我已經在互聯網上搜索瞭解決方案,我和我的studygrp正在製作一個從classLibrary獲取信息的datagridview。所有的工作,但現在我們得到過濾,但我能找到的所有是綁定源,但這不是我想的。我只想要一個簡單的過濾器,以便您可以在文本框中輸入內容,並在datagridview中顯示它,如果它包含該信息的話。我試過了:篩選器DataGridView

((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = "FromColumn like '%" + textBox1.Text + "%'"; 

但它不工作就像我想要它嗯......任何人都可以幫忙嗎?

回答

2

試試這個:

DataView dv = ((DataTable)dataGridView1.DataSource).DefaultView; 
dv.RowFilter = "FromColumn like '%" + textBox1.Text + "%'"; 
dataGridView1.DataSource = dv; 
+0

我應該怎麼做dataGridView1.DataBind();?它給了我它不包含dataBind的定義? – Ra91

+0

我們正在編程3層體系結構,設計的Windows窗體,處理信息的邏輯層和獲取數據並保存數據的數據層,以便DataGridView綁定dataGridView1.DataSource = logic.LoadMessages();從數據層加載消息 – Ra91

+0

@ Ra91查看更新後的答案。 –

3

嘗試的BindingSource。它提供

BindingSource bs = new BindingSource(); 
bs.DataSource = dataGridView1.DataSource; 
bs.Filter = "yourColumnName like '%" + textBox1.Text + "%'"; 
dataGridView1.DataSource = bs; 
+0

thnx爲答案:D但我得到系統。 NullReferenceException是未處理的 消息= objectReference沒有被賦予一個對象的實例 – Ra91

+0

Thx再次sami爲你的答案:D現在它的一半工作更好,然後在xD之前,但現在的問題是當我搜索它只是給我一個空行?你知道那會是什麼嗎? – Ra91

+0

仍然增加了一個空白行,有點令人沮喪; /即時嘗試eveything,但仍然沒有結果 – Ra91

2

我找到這個適合我最好需要過濾的良好廣泛的設施:

要在表格顯示存儲在一個的BindingList數據(支持INotifyPropertyCchanged這是相當整齊時在更新列表....) 所以somwhere你定義了這個的BindingList:

public MyDataList = new BindingList<MyDataItem>(); 

其分配到網格的數據源:

myDataGrid.DataSource = MyDataList; 

當按下「過濾器按鈕」,或你想要做什麼大事:

myDataGrid.DataSource = MyDataList.Where(ln => ln.propertyname.Contains(textBoxFilter.Text).ToList(); 

重置filterm時候才設置回原單源

MyDataGrid.DataSource = MyDataList 

希望它能幫助,問候

+0

我不知道你的代碼裏有什麼'ln',但你的回答讓我想到另一個答案,一直躲避着我。那謝謝啦! – John

+0

ln只是linq表達式(方法語法)的佔位符/變量名稱 您可以使用任何您想要的內容..請參閱: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide /概念/ LINQ /查詢語法和方法 - 句法 - 在-LINQ – womd