C#使用数组

时间:2017-03-01 10:25:42

标签: c# datagridview filter bindingsource

我想知道如何使用BindinSource.Filter进行搜索。我有这样的代码Suche.Filter = string.Format("{0} = '{1}'", "ID", ergebnis); ergebnis是我的数组,其中包含我所有联系人的ID。现在我想在DGV中显示具有相同ID的所有联系人

Sourcecode

3 个答案:

答案 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);
            }