1

BindingSourceLINQ to SQLを使用BindingListし、プロジェクトにを実装したら、を使用してのTextbox行をフィルター処理するDataGridView必要があるため、テキストボックスのコンテンツを削除すると、フィルターは何にもリセットされません。

私のコードは次のとおりです。

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

しかし、これは何もしません、何か考えてください?

4

4 に答える 4

3

次のようにしてみてください。

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

// productDataGridView.DataSource = productBindingSource;

既に productBindingSource を使用している場合、DataGridView を再度 DataSourced にする必要はありません。

于 2012-08-01T21:39:45.207 に答える
2

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

そこに示されているように、bindingsource.Filterは文字列値です。デフォルトはnullなので、これを行うだけです:

productBindingSource.Filter = null;

UI を更新するために何かをしなければならない可能性もありますが、通常は bindingSource がそれ自体を処理します。

于 2012-08-01T18:38:31.387 に答える
0

「Find」メソッドは BindingList で直接使用できないことがわかりましたが、幸いなことに IEnumerable を使用する代替手段があります。プロジェクトに BindingList を実装した後、次のコードを使用して、バインドされた datagridview をフィルター処理できます。

    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;
    }
于 2012-08-02T01:05:46.870 に答える