【问题标题】:Filtering datagridview from another form从另一个表单过滤datagridview
【发布时间】:2016-01-20 14:02:34
【问题描述】:

所以我正在 Windows 窗体中制作项目,需要一些帮助。

在我的第一个表单中,我将本地 sql 数据库中的数据导入 DataGridView,这是关于客户汇款的。

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

这样的查询可以有多个参数。

所以我在按钮上调用另一个表单单击以输入所有过滤器参数。

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

Form form1 = new Form();

但我仍然无法访问 DataGridView。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# sql winforms


    【解决方案1】:

    这不引用原始表单,它创建了一个新的

    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 公开的任何public 功能。公共属性、公共方法等。所以无论Form1 上需要发生什么逻辑,只需公开一个方法来执行它并从Form2 调用该方法。

    【讨论】:

      【解决方案2】:

      从您有按钮单击事件的初始表单中,您可以像这样调用您的第二个过滤表单:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-08
        • 2012-05-25
        • 2015-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 2011-03-11
        相关资源
        最近更新 更多