我想知道如何使用BindinSource.Filter进行搜索。我有这样的代码Suche.Filter = string.Format("{0} = '{1}'", "ID", ergebnis);
ergebnis是我的数组,其中包含我所有联系人的ID。现在我想在DGV中显示具有相同ID的所有联系人
答案 0 :(得分:0)
这就是我解决它的方法:
private void filter(int selectedID) {
DataTable dtFilter = new DataTable();
//speichere GridView zum Filtern
dtFilter = (DataTable)this.grdMDT.DataSource;
try {
dtFilter = dtFilter.Select("ID = " + selectedID).CopyToDataTable();
this.DGV.DataSource = dtFilter;
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
我只是将DataGridView
的内容复制到新的DataTable
并使用Select
来获取我需要的所有结果。然后,我为DataSource
设置了新的GridView
。
您可能希望将GridView
的原始内容存储在单独的DataTable
中,以清除过滤结果。
当然,您需要在for循环之外执行此操作。
答案 1 :(得分:0)
您可以通过获取视图并使数组成为对象数组来应用过滤器
ICollectionView view = CollectionViewSource.GetDefaultView(yourdatagridview);
view.Filter = FilterPerItem;
yourdatagridview.ItemsSource = view;
在FilterPerItem
中添加过滤逻辑
private bool FilterPerItem(Contact item)
{
int rightID = 1;
if (item.ID == rightID)
{
return true;
}
else return false;
}
答案 2 :(得分:0)
我找到了我的代码的结果,谢谢Guys!
try
{
int[] ergebnis = new int[20];
var filterString = new List<string>();
for (int i = 1; i < result.Length; i++)
{
int j = Int32.Parse(result[i][12]);
ergebnis[i] = j;
filterString.Add(string.Format("{0} = '{1}'", "ID", j));
}
Suche.Filter = string.Join(" OR ", filterString);
kitba();
}
catch (IndexOutOfRangeException ex)
{
Debug.WriteLine(ex);
}