我有一个用数据源和表适配器创建的DGV。在表adapdter中,我定义了两个参数来进行搜索。那么我有一个带有数据网格视图的WPF和两个用于进行搜索的文本框。
public partial class FormConsultaAdvogadosDS : Form
{
public FormConsultaAdvogadosDS()
{
InitializeComponent();
}
private void FormConsultaAdvogadosDS_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'dataSetAdvogados.Advogado' table. You can move, or remove it, as needed.
this.advogadoTableAdapter.Fill(this.dataSetAdvogados.Advogado);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
try
{
this.advogadoTableAdapter.FillBy(this.dataSetAdvogados.Advogado, textBox1.Text);
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
try
{
this.advogadoTableAdapter.FillBy1(this.dataSetAdvogados.Advogado, textBox2.Text);
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
}
这是我现在的代码。 我只使用其中一个文本框进行过滤就可以了,它可以过滤掉一切。但我真正需要的是第一次过滤内的过滤器。喜欢第一次过滤的依赖。 如果我在textbox1中插入文本“ABC”,显示的行有“ABC”然后,使用第一个过滤器,我需要在textbox2“DEF”中优化插入,但它不起作用。它会使新搜索忽略第一个过滤。有人能帮我吗? 此致
答案 0 :(得分:0)
过滤一个集合时,通常需要管理两个集合。一个是包含所有可用值/项的原始未过滤集合,另一个是仅包含与过滤条件匹配的项目的过滤集合。
如果您有两个过滤器,则需要管理三个集合。一个是原始的未经过滤的集合,第二个是第一个过滤的集合,它只包含与第一个过滤条件匹配的项目,第三个是仅包含与第二个条件匹配的项目的第二个过滤集合。
因此,如果不清楚,这是一个例子。我们遇到这样的情况:用户输入ABC
,第二个集合返回与搜索string
匹配的原始(完整)集合中的所有项目。现在这里是重要的部分。我们需要过滤已经由ABC string
过滤的第二个集合,而不是使用第二个过滤器再次过滤原始集合。
第三个集合是绑定到UI的数据集合,仅显示原始集合中符合两个过滤条件的项目。
更新>>>
作为另一个例子,您可以使用LinQ
过滤您的第二个集合(已经按第一个条件过滤了):
ThirdCollection = new ObservableCollection<string>(SecondCollection.Where(i =>
SecondFilterConditionMethod(i)));
现在这个SecondFilterConditionMethod
方法可以包含任何类型的条件,只要它返回true
或false
:
private bool SecondFilterConditionMethod(string item)
{
// implement whatever filter condition here
return item.StartsWith("A");
}
现在您可能没有使用string
,但无论您使用何种数据类型,这个想法都是一样的。另请参阅我在Stack Overflow上的Change combo box item list depending on the Textbox Text问题的答案,以获取更多示例。