我可以在gridview中进行多重过滤吗?到目前为止,我有三种不同的方法用于每种过滤。我希望能够做这样的事情。首先选择将显示的组合框值,然后从此筛选列表中,我希望能够使用文本框搜索其他内容。
private void button9_Click(object sender, EventArgs e)
{
var result = list3.Where(Srodek => Srodek.Srodek.ID.Device == textBox2.Text).ToList();
dataGridView4.DataSource = result;
}
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
var result = list3.Where(Srodek => Srodek.Srodek.category1 == comboBox1.SelectedItem.ToString()).ToList();
dataGridView4.DataSource = result;
}
现在,当我从组合框中选择一些值时,它会在gridview中显示我想要的内容,但稍后当我在文本框中插入内容并单击按钮时,它会过滤整个列表,而不是已经被组合框过滤掉的内容。我怎样才能实现它?
答案 0 :(得分:3)
尝试FilterDataGrid()
调用这两个事件:
private void button9_Click(object sender, EventArgs e)
{
FilterDataGrid();
}
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
FilterDataGrid();
}
private void FilterDataGrid()
{
var _text = Convert.ToString(textBox2.Text);
var _comboText = ! string.IsNullOrEmpty(comboBox1.Text) ? Convert.ToString(comboBox1.SelectedItem) : string.Empty;
var result = list3.Where(Srodek => Srodek.Srodek.category1 == _comboText || Srodek.Srodek.ID.Device == _text).ToList();
//
dataGridView4.DataSource = result;
}
希望这有助于你。
答案 1 :(得分:1)
我认为list3
中的元素类型为T
:
private void button9_Click(object sender, EventArgs e)
{
if(dataGridView4.DataSource is IEnumerable<T>){
var result = ((IEnumerable<T>)dataGridView4.DataSource).Where(Srodek => Srodek.Srodek.ID.Device == textBox2.Text).ToList();
dataGridView4.DataSource = result;
}
}
答案 2 :(得分:0)
创建一个将托管您的列表的全局属性,以便每次在列表上执行查询时,您都会对已经过滤的最新列表执行查询。
答案 3 :(得分:0)
您没有更改过滤器的来源,因此您每次都要在同一组上进行过滤。一种选择是使用原始数据集和过滤数据集,然后在过滤原始数据时将结果保存在过滤集中。