1

我知道关于这个主题有很多线程,但我已经尝试了所有方法,但仍然没有运气过滤我的 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();
}

有什么帮助吗?或至少解释为什么这不起作用?我已经为此工作了好几个小时,但似乎无法在任何地方找到答案

4

4 回答 4

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

于 2012-10-27T06:02:05.513 回答
0

有一个在数据网格视图上创建过滤器的库:

DataGridView 过滤器弹出窗口

问候

于 2012-07-09T06:39:10.813 回答
0

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

然后您可以在 FilterData 方法中使用以下内容:-

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

你可以这样设置:-

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

如果你这样做,你甚至不必刷新你的数据网格,它会自动完成。

希望这可以帮助。

于 2012-07-09T08:28:31.847 回答
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());
        }
    );           
}
于 2012-07-09T09:54:32.770 回答