如何创建一个搜索文本框,其中datagridview绑定到C#中的BindingSource?

时间:2017-05-26 07:36:10

标签: c# datagridview bindingsource

我想在C#和SQLServer上的数据网格视图上创建一个搜索文本框,但是datagridview绑定到BindingSource。 我尝试这个代码不起作用。

private void ucObat_Load(object sender, EventArgs e)
        {
            db = new DbSIMP3Entities();
            tbObatBindingSource.DataSource = db.tbObats.ToList();
            tbSatuanBindingSource.DataSource = db.tbSatuans.ToList();
            tbKategoriBindingSource.DataSource = db.tbKategoris.ToList();
            tbMerkBindingSource.DataSource = db.tbMerks.ToList();

        }
private void txtSearch_Click(object sender, EventArgs e)
        {
            tbObatBindingSource.Filter = "NmObat like '&" + txtSearch.Text + "&'";
        }

1 个答案:

答案 0 :(得分:1)

BindingSource.Filter仅在您的数据源实现IBindingListView

时才有效
  

只有实现IBindingListView接口的底层列表才支持过滤。

因此,要使其工作,您需要更改基础数据源。

如果您因某些原因不想使用DataView,请尝试使用BindingSource本身作为数据源。

private BindingSource bs = new BindingSource();
private BindingList<ObatsEntity> initialObats = new BindingList<ObatsEntity>();

private void ucObat_Load(object sender, EventArgs e)
{
    db = new DbSIMP3Entities();
    initialObats = new BindingList<ObatsEntity>( db.tbObats.ToList() );
    bs.DataSource = initialObats;
    dataGridView.DataSource = bs;
}

private void txtSearch_Click(object sender, EventArgs e)
{
    var filteredObats = new BindingList<ObatsEntity>( initialObats.Where( o => o.NmObat == txtSearch.Text ).ToList() );
    bs.DataSource = filteredObats;
    bs.ResetBindings();
}