使用按钮

时间:2017-06-06 15:27:19

标签: c# winforms datagridview filter

主要目标是不改变DataSource。所以,当我得到我的结果集时,我想根据这个结果集总是过滤。我一直在使用DataGridView,并且预先存在的代码仅限于将行直接添加到DataGridView而不是使用DataTable。

我已经尝试了这个并且它有效,但我觉得它不是非常有效率,并且想知道是否有一个不需要循环的最佳解决方案。

这是按下按钮:

for (int i = 0; i < this.dataGridView1.RowCount; i++)
    {
     if (this.dataGridView.Rows[i].Cells[3].Value = "Sleeping Disorder")
     {
       this.dataGridView.Rows[i].Visible = true;
     }
     else
     {
       this.dataGridView.Rows[i].Visible = false;
      }
    }

我研究了一下,看到人们使用DataTables,但我不允许重新编写整个代码集,所以我想知道如果没有DataTable我是否可以这样做,或者我是否必须使用DataTable,是否可以使用一种方法用我的DataGridView填充表并从那里开始?

数据最初来自MySQL查询。 感谢。

1 个答案:

答案 0 :(得分:0)

我用来过滤DataGrid的片段

// DevicesGrid is the DataGrid with the data I want to filter
// this next line gets the textbox contents to filter on, you won't need this
Controls.TextBox textbox = sender as Controls.TextBox;
        ICollectionView cvs = CollectionViewSource.GetDefaultView(DevicesGrid.ItemsSource);

   // doing the filter
// A PortResult is what is in the collection, replace that with whatever is in yours
        cvs.Filter = new Predicate<object>(item =>
        {
            PortResult pr = item as PortResult;
            if (pr.Name.Contains(textbox.Text))
            { return true; }
            else { return false; }
        });