从另一个表单过滤datagridview

时间:2016-01-20 14:02:34

标签: c# sql winforms

所以我在Windows Forms中制作项目并需要一些帮助。

在我的第一个表单中,我将数据从本地sql数据库导入DataGridView,这是关于Client Money Transfers。

现在我需要为我的DataGridView创建一个Filter,例如显示所有传输超过1500 $的客户端数据。

此类查询可以有多个参数。

所以我在buttonClick上调用另一个表单来输入所有Filter参数。

在ButtonClick上输入参数后,我需要过滤第一个Form中的DGV中的数据。但我不知道如何从另一个表格改变DGV。我试图通过这种方式调用form1:

Form form1 = new Form();

但我仍然无法访问DataGridView。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

这不会引用原始表单,它会创建一个 new

Form form1 = new Form();

因此,您对该变量所做的任何事情都发生在第二个内存中,不可见的形式。

据推测,在你主表单的某个地方,你正在做这样的事情,以便用过滤器逻辑显示你的第二个表格,对吗?:

Form2 form2 = new Form2();
form2.Show();

您可以做的是通过该构造函数传递对当前表单的引用,以便Form2具有对主表单的引用。所以在Form2构造函数中,你可能会这样做:

private Form1 parentForm;

public Form2(Form1 form1)
{
    this.parentForm = form1;
}

Form2代码的其他任何位置,您都可以引用该父表单:

this.parentForm.SomeMethodCall();

然后在显示Form1实例的Form2中,它可以传递对自身的引用:

Form2 form2 = new Form2(this);
form2.Show();

此时Form2现在可以引用Form1公开的任何公开功能。公共属性,公共方法等等。无论在Form1上需要发生什么逻辑,只需公开一个方法来执行它并从Form2调用该方法。

答案 1 :(得分:0)

从您有按钮点击事件的初始表单中,您可以调用第二个过滤表单,如下所示:

using ( Form  form2 =  new Form())
{
    if(form2.ShowDialog() == DialogResult.OK) 
    {
         //apply data filtering based on what you got from form2
    }
}