我知道在这个主题上有很多线程,但我已经尝试了所有内容,但仍然无法过滤我的datagridview。我试图根据用户在文本字段中输入的值来过滤datagridview的行。 datagridviews数据源设置在下面提供的数据源中。
所以这是我正在使用的代码。我没有错误,datagridview根本不会改变。 ManufacturerService.GettAll返回制造商列表,我将其转换为
的绑定列表 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 :(得分: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
答案 1 :(得分:0)
答案 2 :(得分:0)
我认为您不需要使用绑定列表,最好使用DataTable作为“绑定源”的数据源。
然后您可以在FilterData方法中使用以下内容: -
DataTable.DefaultView.RowFilter = string.format("Name like '%{0}%'", str);
您可以这样设置: -
Binding Source.Datasource = DataTable,
DatagridView.Datasource = Binding Source;
如果你这样做,你甚至不必刷新datatgrid,它会自动完成。
希望这有帮助。
答案 3 :(得分: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());
}
);
}