2012-08-01 49 views
1

使用BindingSource到SQL,並且已經在我的項目實施BindingList,我必須使用TextboxDataGridView過濾行,所以當我刪除文本框的內容,過濾器應重置爲無。如何在LINQ重置BindingSource的過濾器,以什麼

我的代碼如下:

if (textBox1.Text.Length == 0) 
{ 
    productBindingSource.Filter = null; 
} 
else 
{ 
    productBindingSource.Filter = "ProductName = '" + textBox1.Text +"'"; 
    //productBindingSource.RemoveFilter(); 
} 
productDataGridView.DataSource = productBindingSource; 

不過這並沒有什麼,什麼想法嗎?

回答

2

http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.filter.aspx

如圖那裏bindingsource.Filter是一個字符串值。默認值是零,所以才這樣做:

productBindingSource.Filter = null; 

其可能的,雖然你必須做一些事情來更新你的UI,但通常BindingSource的需要的是照顧自己。

+0

這不起作用,您的鏈接爲數據集類型數據源提供代碼。請看看我最初的問題更新。 – 2012-08-01 21:10:41

+0

如果做這個'productBindingSource.Filter =「」;' – wterbeek 2012-08-02 06:18:47

+1

什麼發生沒有,因爲Filter不直接爲bindingSource控件工作,所以有必要在項目中實現一個BindingList並使用IEnumerable達到這個目的,請[看看這個](http://stackoverflow.com/questions/11691797/how-do-i-position-a-datagridview-to-the-searched-text-input/11701585#11701585)知道如何實現一個BindingList在你的項目中。 – 2012-08-02 14:00:31

2

試試這樣說:

if (textBox1.Text.Length == 0) { 
    productBindingSource.RemoveFilter(); 
} else { 
    productBindingSource.Filter = "ProductName = '" + textBox1.Text +"'"; 
} 

// productDataGridView.DataSource = productBindingSource; 

在DataGridView不應該需要的,如果它已經使用productBindingSource再次DataSourced。

+0

這也行不通,我已經測試過了。請在我的問題中看到關於評論的代碼行 – 2012-08-01 23:30:28

+0

@AlphaBird不確定你的意思是「看到我的問題中的評論的代碼行」?您的productBindingSource是否來自BindingList <>? – LarsTech 2012-08-01 23:34:42

+0

在我的問題,你可以找到這個://productBindingSource.RemoveFilter(); 意味着我已經嘗試過RemoveFilter。是的,我已經傳遞了一個BindingList到我的productBindingSource,它已經在爲「Find」方法工作。 – 2012-08-01 23:39:56

0

我發現「查找」方法不能直接與BindingList一起使用,但幸運的是有一種替代方法,使用IEnumerable。在項目實施一個的BindingList後,我可以使用下面的代碼過濾綁定的datagridview:

private void button1_Click(object sender, EventArgs e) 
    { 
     var qry = (from p in dc.Products 
        select p).ToList(); 
     BindingList<Product> list = new BindingList<Product>(qry); 
     IEnumerable<Product> selection = list.Where(m => m.ProductName.Contains(textBox1.Text) == true); 
     productBindingSource.DataSource = selection; 
    } 
0

我假設你測試,如果文本框在TextChanged事件是空的。 也許你的方法沒有被調用時文本長度= 0. 我不記得確切的原因,但我經歷過這種情況下。

如果您使用的是您編寫的BindingList,請提供代碼。 RemoveFilter,設置過濾器爲空或空字符串一直爲我工作。

相關問題