非静态字段、方法或属性dataGridView1需要对象引用

本文关键字:dataGridView1 对象引用 属性 静态 字段 方法 | 更新日期: 2023-09-27 18:06:07

我的Windows窗体应用程序中有两个窗体。我想从第二种形式中取一些参数来过滤第一种形式中的DataGridView

这是我的FilterGrid方法在第一个形式:

public void FilterGrid(string query)
{
    OleDbConnection connection = new OleDbConnection();
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    OleDbCommand command = new OleDbCommand();
    connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:'Users'Tamer Memili'Desktop'Urun.accdb; Persist Security Info=False;";
    connection.Open();
    DataSet dataSet = new DataSet();
    DataTable dataTable = new DataTable();
    dataSet.Tables.Add(dataTable);
    adapter.SelectCommand = command;
    command.Connection = connection;
    command.CommandText = query;
    adapter.Fill(dataTable);
    dataGridView1.DataSource = dataTable.DefaultView;
    connection.Close();
}

我必须将此方法定义为公共静态void才能从form2访问它,但是当我这样做时,我在这一行得到一个错误:

dataGridView1.DataSource = dataTable.DefaultView;

我得到这个错误:

非静态字段、方法或属性dataGridView1需要对象引用

我该怎么做呢?

非静态字段、方法或属性dataGridView1需要对象引用

尝试将FilterGrid方法设置为非静态:

public void FilterGrid(string query)

然后将form1引用发送给form2。我怀疑你在某些时候会做这样的事情

   Form2 form2 = new Form2()
    form2.showDialog()

您可以在Form2中添加一个新的构造函数,它看起来像这样

 Form2(Form1 form1Instance)
   {
     this._form1Instance =form1Instance
   }

并在构造Form1时将其实例传递给Form2:

  Form2 form2 = new Form2(this)
  form2.showDialog()

然后,当你想从表单2中调用过滤器表单FilterGrid时,你所要做的就是

  _form1Instance.FilterGrid("my query")

希望对大家有所帮助