Вопрос:

Как обнулить фильтр bindingsource?

.net winforms c#-4.0 bindingsource bindinglist

9809 просмотра

4 ответа

2449 Репутация автора

Используя BindingSourceLINQ to SQL и реализовав BindingListв своем проекте a , я должен использовать a Textboxдля фильтрации строк в a DataGridView, поэтому, когда я удаляю содержимое текстового поля, Filter должен быть сброшен в ничто.

Мой код выглядит следующим образом:

if (textBox1.Text.Length == 0)
{
    productBindingSource.Filter = null;
}
else
{
    productBindingSource.Filter = "ProductName = '" + textBox1.Text +"'";
    //productBindingSource.RemoveFilter();
}
productDataGridView.DataSource = productBindingSource;

Но это ничего не значит, любая идея, пожалуйста?

Автор: Sami-L Источник Размещён: 01.08.2012 05:36

Ответы (4)


2 плюса

396 Репутация автора

http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.filter.aspx

как показано там, bindingsource.Filterэто строковое значение. И по умолчанию это ноль, так что просто сделайте это:

productBindingSource.Filter = null;

возможно, что вам нужно что-то сделать для обновления вашего пользовательского интерфейса, но, как правило, bindingSource позаботится об этом сам.

Автор: wterbeek Размещён: 01.08.2012 06:38

3 плюса

72561 Репутация автора

Попробуйте это так:

if (textBox1.Text.Length == 0) {
  productBindingSource.RemoveFilter();
} else {
  productBindingSource.Filter = "ProductName = '" + textBox1.Text +"'";
}

// productDataGridView.DataSource = productBindingSource;

DataGridView не должен быть снова DataSourced, если он уже использует productBindingSource.

Автор: LarsTech Размещён: 01.08.2012 09:39

0 плюса

2449 Репутация автора

Я обнаружил, что метод «Найти» нельзя использовать напрямую с BindingList, но, к счастью, есть альтернатива, использующая IEnumerable. После реализации BindingList в проекте я могу отфильтровать связанное представление данных, используя следующий код:

    private void button1_Click(object sender, EventArgs e)
    {
        var qry = (from p in dc.Products
                   select p).ToList();
        BindingList<Product> list = new BindingList<Product>(qry);
        IEnumerable<Product> selection = list.Where(m => m.ProductName.Contains(textBox1.Text) == true);
        productBindingSource.DataSource = selection;
    }
Автор: Sami-L Размещён: 02.08.2012 01:05

0 плюса

1858 Репутация автора

Я предполагаю, что вы проверяете, является ли текстовое поле пустым в событии TextChanged. Может быть, ваш метод не вызывается, когда длина текста = 0. Я не помню точно, почему, но я испытал этот случай раньше.

Если вы используете BindingList, который вы написали, предоставьте код. RemoveFilter, установка Filter на ноль или пустую строку всегда работала для меня.

Автор: Mauro Sampietro Размещён: 14.05.2014 01:02
Вопросы из категории :
32x32