2012-11-07 249 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