主要目标是不改变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查询。 感谢。
答案 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; }
});