2016-05-04 66 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