2012-07-09 264 views
0

我知道这个主题有好几个线程,但我已经尝试了一切,仍然没有运气过滤我的datagridview。我试图根据用户在文本字段中输入的值来过滤datagridview的行。 datagridviews数据源在下面提供的数据源中设置。DataGridView过滤器不工作

所以这里是我使用的代码。我没有得到任何错误,datagridview根本不会改变。 ManufacturerService.GettAll返回制造商的名单,我将其转换为一个的BindingList到

bsManufacturers.DataSource = new BindingList<Manufacturer>(ManufacturerService.GetAll(_ctx));

在此代码运行文本框的TextChanged事件。我已经检查过断点等。该代码在执行过滤器字符串正确时执行。

private void FilterData(string str) 
{ 
    bsManufacturers.Filter = string.Format("Name like '%{0}%'", str); 
    dgvManufacturers.Refresh(); 
} 

任何帮助?或至少解释为什么这不起作用?我一直在做这个了好几个小时,只是不能似乎找到一个anwser任何地方

回答

0

我用这个项目解决了这个问题: http://blw.sourceforge.net/

我个人认为应该有这样做的更好的方式,但它的工作,现在我猜,我将不得不很乐意与“足够好”目前。

这里是工作代码。无论如何,重要的部分。

private void PopulateDataGridView() 
{ 
    blvManufacturers = new BindingListView<Manufacturer>(ManufacturerService.GetAll(_ctx)); 
    _bsManufacturers = new BindingSource { DataSource = _blvManufacturers}; 
    dgvManufacturers.DataSource = _bsManufacturers;   
} 

private void FilterData(string str) 
{ 
    // Change the filter of the view. 
     blvManufacturers.ApplyFilter(
     delegate(Manufacturer manu) 
     { 
      // uses ToLower() to ignore case of text. 
      return manu.Name.ToLower().Contains(str.ToLower()); 
     } 
    );   
} 
0

存在对数据网格视图中创建过滤器库:

DataGridView Filter Popup

问候

+0

尝试此操作,并将dgv数据源设置为null,然后将其设置为bindingsource。虽然我打破并检查绑定源的属性的过滤器属性设置正确,但仍然datagridview不过滤 – limlim 2012-07-09 07:02:19

+0

好吧,所以我发现道具SupportsFiltering = false。 http://msdn.microsoft。com/en-us/library/system.windows.forms.bindingsource.supportsfiltering.aspx我仍然不明白为什么。应该BindingList没有实现这个接口? – limlim 2012-07-09 07:53:06

+0

试试我更新后的帖子。 – BizApps 2012-07-09 07:54:39

0

我不要以为你需要为此使用绑定列表,你最好使用DataTable作为“绑定源”的数据源。

然后,你可以使用下面你筛选数据方法: -

DataTable.DefaultView.RowFilter = string.format("Name like '%{0}%'", str); 

你会设置它是这样的: -

Binding Source.Datasource = DataTable, 
DatagridView.Datasource = Binding Source; 

如果你这样做,你甚至不会需要刷新你datatgrid,它会自动做到这一点。

希望这会有所帮助。

+0

我还没有尝试过。这我将不得不编写代码先将我的绑定列表或通用列表转换为DataTable。 – limlim 2012-07-09 09:46:54

+0

ManufacturerService.GetAll(_ctx)实际上做了什么? – Derek 2012-07-09 10:52:33

1

数据排序信息包含在网格标题中。用户可以在一个或多个标题中设置单个或多个排序。在规划层面,排序看上去如下

//Get top-level header 
Header header = grid.Headers[0]; 

header["Product"].SortDirection = SortDirection.Ascending; 
header["Price"].SortDirection = SortDirection.Descending; 

设置Column.Sortable属性设置为false足以使软件只能从通过UI dapfor在修改排序阻止用户。 com