我想刷新數據網格視圖後用戶插入一些項目到數據庫。我試圖清空視圖的數據源併爲其應用新的數據源,但它不起作用。如何在更新時刷新數據網格視圖?從C#窗口#
下面是系統的流程:
- 單擊添加項目,然後彈出一個
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
: //獲取當Form 1被加載 私人無效Form1_Load的數據源(對象發件人,EventArgs的) { dataGridView1.DataSource = df.get_view();
}
//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()
運行。但它無法刷新視圖。
這是什麼問題呢?或者有另一種方法可以做到這一點? 謝謝
'database_connect'方法創建'Form1'的新實例。你需要在已經存在的實例中更新'datagridview' – Fabio
'df.get_view()'在你調試時是否可以? – Badiparmagi
'database_connect()'是以另一種形式插入數據的地方創建的。而'gridView'是另一種形式。 – Capslock10