У меня есть список, привязанный к angridview, и я хочу иметь возможность создавать условия фильтра «Где», в то время как комбинация параметров фильтра контролируется пользователем.
Каков наилучший способ фильтрацииисходное логическое свойство списка по модели и позволяет переключать все условия фильтра?
Я знаю, что filterdList не является необходимостью, но любое другое решение, которое я уже видел, не позволяет переключать условие условия Where.
public partial class Form1 : Form
{
List<dummy> Origlist = new List<dummy> {
new dummy { pk = 1 , istype1 = true, istype2 = false, istype3=false, istype4=false },
new dummy { pk = 2 , istype1 = true, istype2 = false, istype3=false, istype4=false },
new dummy { pk = 3 , istype1 = false, istype2 = true, istype3=false, istype4=false },
new dummy { pk = 4 , istype1 = false, istype2 = true, istype3=false, istype4=false },
new dummy { pk = 5 , istype1 = false, istype2 = false, istype3=true, istype4=false },
new dummy { pk = 6 , istype1 = false, istype2 = false, istype3=true, istype4=false },
new dummy { pk = 7 , istype1 = false, istype2 = false, istype3=false, istype4=true },
new dummy { pk = 8 , istype1 = false, istype2 = false, istype3=false, istype4=true },
new dummy { pk = 9 , istype1 = false, istype2 = false, istype3=true, istype4=false },
new dummy { pk = 10 , istype1 = false, istype2 = true, istype3=false, istype4=false },
new dummy { pk = 11 , istype1 = false, istype2 = false, istype3=false, istype4=false }
};
List<dummy> filteredList = new List<dummy>();
public Form1()
{
InitializeComponent();
}
private void Bind()
{
dataGridView1.DataSource = null;
dataGridView1.DataSource = filteredList;
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
{
filteredList.AddRange(Origlist.Where(a => a.istype1 == true).ToList());
}
else
{
filteredList.RemoveAll(a => a.istype1 == true);
}
Bind();
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
if (checkBox2.Checked)
{
filteredList.AddRange(Origlist.Where(a => a.istype2 == true).ToList());
}
else
{
filteredList.RemoveAll(a => a.istype2 == true);
}
Bind();
}
private void checkBox3_CheckedChanged(object sender, EventArgs e)
{
if (checkBox3.Checked)
{
filteredList.AddRange(Origlist.Where(a => a.istype3 == true).ToList());
}
else
{
filteredList.RemoveAll(a => a.istype3 == true);
}
Bind();
}
private void checkBox4_CheckedChanged(object sender, EventArgs e)
{
if (checkBox4.Checked)
{
filteredList.AddRange(Origlist.Where(a => a.istype4 == true).ToList());
}
else
{
filteredList.RemoveAll(a => a.istype4 == true);
}
Bind();
}
}
![simulation](https://i.stack.imgur.com/X5Ppq.png)