我想在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 + "&'";
}
答案 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();
}