2015-02-10 134 views
0

我有一個綁定的datagridView,我想使用TextBox值對其進行過濾。使用TextBox過濾Datagridview行

我用這個代碼:

private void ChercheStextBox_TextChanged(object sender, EventArgs e) 
    { 
     try 
     { 
      ((DataTable)dataGridView3.DataSource).DefaultView.RowFilter = string.Format("LibService like '%{0}%'", ChercheStextBox.Text.Trim().Replace("'", "''")); 
     } 
     catch 
     { 

     } 

    } 

但這代碼不過濾DataGridView的連我都使用相同的代碼

在其他的DataGridView和它完美的作品。我不知道我的代碼中有哪些錯誤

錯誤?

在此先感謝。

編輯:

我刪除嘗試捕捉和我得到這個錯誤信息:

無法投類型的對象system.windows.forms.bindingsource爲鍵入「system.data .datatable'

我該如何解決?

+0

您確定列名(LibService)是否正確? – sloth 2015-02-10 13:36:47

+0

是的,我確定它是正確的 – user4428204 2015-02-10 13:38:58

+0

你是否將事件處理程序綁定到正確的事件?將一個斷點放入該方法並在離開方法之前檢查'RowFilter'屬性 – sloth 2015-02-10 13:50:21

回答

4

的數據源是一種類型的BindingSource不是DataTable的,所以試試這個代碼:

private void ChercheStextBox_TextChanged(object sender, EventArgs e) 
    { 
     var bd = (BindingSource)dataGridView3.DataSource; 
     var dt = (DataTable)bd.DataSource; 
     dt.DefaultView.RowFilter = string.Format("LibService like '%{0}%'", ChercheStextBox.Text.Trim().Replace("'", "''"));  
     dataGridView3.Refresh(); 


    } 
+0

感謝它與我合作 – user4428204 2015-02-11 10:03:41

+0

這是可能的計數和獲取HeaderText和過濾器?實際上,我不想指定任何特定的標題值。 – 2016-12-03 07:26:57

0

我認爲你需要使用此方法:

public void ChercheStextBox_TextChanged(object sender, EventArgs e) 
    { 
      //NASSIM LOUCHANI 
      BindingSource bs = new BindingSource(); 
      bs.DataSource = dataGridView3.DataSource; 
      bs.Filter = string.Format("CONVERT(" + dataGridView3.Columns[1].DataPropertyName + ", System.String) like '%" + ChercheStextBox.Text.Replace("'", "''") + "%'"); 
      dataGridView3.DataSource = bs; 

    } 

所有你需要的是改變列數以組合框爲例...只是用你的想象力。

謝謝。