2016-05-04 107 views
0

我有一個窗戶DataGridViewenter code here形成,我從數據源產生通過拖放對象到表單中。過濾我的DataGridView

中的行從數據源正確顯示,我希望能夠使用TextBox通過它們特定的列來過濾他們。

我的綁定源被稱爲「customerBindingSource」。

我嘗試這樣做:

private void _txtFilterEmail_TextChanged(object sender, EventArgs e){ 
    customerBindingSource.DataSource = dataGridView1.DataSource; 
    customerBindingSource.Filter = dataGridView1.Columns[1].HeaderText.ToString() + 
           "LIKE '%" + _txtFilterEmail.Text + "%'"; 
dataGridView1.DataSource = customerBindingSource.DataSource; 
} 

但是當我鍵入TextBox的東西,什麼都不會發生。

我是相當新的Windows Forms和的EntityFramework。

+0

在數據源中,headertext與datapropertyname有什麼不同? –

+0

不,我之前測試過,它們是一樣的。 – mockingbid

+0

'dataGridView1.Columns [1] .HeaderText.ToString()+「LIKE「%‘'有前'LIKE' –

回答

0

試試這個:

private void _txtFilterEmail_TextChanged(object sender, EventArgs e) 
{ 
    (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = 
     string.Format("[{0}] LIKE '%{1}%'", 
     dataGridView1.Columns[1].HeaderText.ToString(), 
     _txtFilterEmail.Text); 
} 

或使用本:

private void _txtFilterEmail_TextChanged(object sender, EventArgs e) 
{ 
    BindingSource bs = new BindingSource(); 
    bs.DataSource = dataGridView1.DataSource; 
    bs.Filter = string.Format("[{0}] LIKE '%{1}%'", 
    dataGridView1.Columns[1].HeaderText.ToString(), _txtFilterEmail.Text); 
    dataGridView1.DataSource = bs; 
} 
+0

我想你的代碼,它在這一部分提出了一個NullReferenceException:!'dataGridView1.Columns [1] .HeaderText。 ToString()' – mockingbid

+0

就像答案一樣在列名[{0}]中添加鉤子,並檢查是否將一個正確的列索引[1]。或嘗試使用第二個命題。 –

+0

我按照你的要求添加鉤子,它仍然會產生相同的異常。第二個命題對我不起作用,datagridview不被過濾。 – mockingbid

1

此分配未經過濾DataSource作爲DGV的DataSource

dataGridView1.DataSource = customerBindingSource.DataSource; 

取而代之的是BindingSource本身壽LD分配:

dataGridView1.DataSource = customerBindingSource; 

順便說一句:我不認爲它是依靠HeaderText遏制Column的名字是個好主意。相反,你應該使用更可靠的財產。這讓我想起,未經測試:

dataGridView1.Columns[yourColumnIndex].DataPropertyName