非静态字段、方法或属性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需要对象引用
我该怎么做呢?
尝试将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")
希望对大家有所帮助