我试图在用户将一些项目插入数据库后刷新数据网格视图 . 我试图取消视图的数据源并为其应用新的数据源,但它不起作用 .
这是系统的流程:
-
点击添加项目,然后弹出一个
add-item form
-
输入产品详细信息,然后单击按钮以插入数据
-
查看更新<-----问题
在这部分中,将有 two forms
和一个 database claee
. 它们是 Form1
(数据视图), Add-item form
和 database_function.cs
.
这是我在 database class
上的代码:
public class database_function
{
OleDbConnection connect = new OleDbConnection();
public database_function()
{
connect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\sys_db.accdb";
}
public void database_connect(String item_code, String des, String unit, double price)
{
Form1 f1 = new Form1();
try
{
connect.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connect;
command.CommandText = "INSERT into item (item_code, description, unit, price) values ('" + item_code + "', '" + des + "', '" + unit + "', " + price + ")";
command.ExecuteNonQuery();
connect.Close();
}
catch(Exception e)
{
Debug.WriteLine(e.Source);
connect.Close();
}
f1.refresh_dataGridView();
}
//return the dataGridView to form 1, and show the database data on it.
public DataTable get_view()
{
connect.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connect;
string query = "Select item_code, description, unit, price from item";
command.CommandText = query;
OleDbDataAdapter da = new OleDbDataAdapter(command);
DataTable dt = new DataTable();
da.Fill(dt);
connect.Close();
Debug.WriteLine("return dataTable");
return dt;
}
}
以下是 form1
上的代码://当form1加载私有时获取数据源void Form1_Load(object sender,EventArgs e)
//Refresh the view
public void refresh_dataGridView()
{
dataGridView1.DataSource = null;
dataGridView1.DataSource = df.get_view();
Debug.WriteLine("refuesh");
}
这是 add-item. form
:
private void button1_Click(object sender, EventArgs e)
{
//Get textfield data....
//If user doesn't input the item data, show the error message. Else, update to database.
if (error == true)
{
error_msg_form emf = new error_msg_form();
emf.Show();
}
else
{
Form1 f1 = new Form1();
database_function df = new database_function();
df.database_connect(item_code_tb.Text, des_tb.Text, unit_tb.Text, Convert.ToDouble(unit_price_tb.Text));
//f1.refresh_dataGridView();
}
}
但是,我调试日志会显示 refresh
,这意味着它可以在 refresh_dataGridView()
中运行 . 但它无法刷新视图 .
有什么问题呢?或者有另一种方法可以做到这一点?谢谢
4 回答
当您调用
database_connect
方法时,使用this
传递下面的表单引用,然后,在方法中添加参数
Form1 form1
,如下所示,并使用相同的引用调用form1.refresh_dataGridView()
.另外,更改以下代码以刷新数据网格视图,
您最好重构代码并将数据库访问代码分离到单独的类文件中 . 然后你可以从其他类,表单等调用这些函数 .
在插入项方法之后的表单中,您可以设置gridview数据源,例如:
你需要两个方法,一个用于插入,一个用于获取详细信息
}
这是我用于我的代码:
在我的情况下,我想在对子窗体进行修改之后触发更新,然后返回到我的datagridview所在的主窗体 . 我使用布尔类型的全局变量来管理它 .
我假设当项目已插入数据库时,您关闭“AddItem”表单 . 我建议在不传递引用的情况下更明确地通知成功插入,并通过将其公开来暴露表单的控制
根据查询结果更改
database_connect
方法返回true/false
然后在
AddItem
表单中将Form.DialogResult
属性设置为Ok
如果已成功添加项目 .然后在Main表单中使用
ShowDialog
方法获取有关成功插入的结果 .