我想在Form2中更新数据库后刷新Form1中的数据网格。我的问题是,在关闭Form2后,它没有更新Form1中的数据网格。从字面上看,我不知道该怎么做。有人能帮帮我吗?
这就是我创建datagrid的方式(在Form1中):
LagerDBEntities1 dataEntities = new LagerDBEntities1();
var query =
from product in dataEntities.Artikel
select new { product.Id, product.artikelname, product.bestand };
dataGrid1.ItemsSource = query.ToList();
这就是我切换到Form2的方式:
Window2 Auslagern = new Window2(currbestand, artikelid, artikelname);
this.Close();
Auslagern.Show();
这就是我切换到Form1的方式:
MainWindow Main = new MainWindow();
this.Close();
Main.Show();
在Form2中,我正在更新数据库:
int counter = currentbestand - ValueS;
if (counter > 0)
{
SqlConnection con = new SqlConnection(@"X");
try
{
con.Open();
string Query = "update Artikel set bestand='" + counter + "' where id='" + artikelid + "' ";
SqlCommand createCommand = new SqlCommand(Query, con);
createCommand.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
MainWindow Main = new MainWindow();
this.Close();
Main.Show();
}
那么如何切换回Form1并查看更新的数据网格?
提前致谢!
答案 0 :(得分:1)
好的 - 问题解决了!
这不能正常运作:
LagerDBEntities1 dataEntities = new LagerDBEntities1();
var query =
from product in dataEntities.Artikel
select new { product.Id, product.artikelname, product.bestand };
dataGrid1.ItemsSource = query.ToList();
所以我用它替换了它并且它起作用了:
SqlConnection con = new SqlConnection(@"Data Source=X");
SqlDataAdapter Query = new SqlDataAdapter(@"SELECT Id, artikelname, bestand FROM Artikel", con);
DataTable dt = new DataTable();
Query.Fill(dt);
dataGrid1.ItemsSource = null;
dataGrid1.ItemsSource = dt.DefaultView;
感谢Binuriki Cliean Jay。
答案 1 :(得分:0)
假设您的Form2将其信息添加到数据库,您可以将填充Datagrid的代码放入公共方法,然后在每次加载表单时调用它,因为它看起来像您在关闭后创建Form1的新实例窗体2。
public void LoadDatagrid()
{
LagerDBEntities1 dataEntities = new LagerDBEntities1();
var query =
from product in dataEntities.Artikel
select new { product.Id, product.artikelname, product.bestand };
dataGrid1.ItemsSource = query.ToList();
}
然后在Form1的Show事件中调用LoadDatagrid
答案 2 :(得分:0)
一种解决方案是使用表单1的Window.Activated()
事件
只需在表单1的代码中添加处理程序,当窗口被激活(即重新聚焦)时,将刷新DataGrid。
public class Form1 : Window {
public Form1() {
InitializeComponent();
}
private void RefreshDataGrid() {
// Refresh DataGrid Here
}
private void Form1_Activated(object sender, EventArgs e) {
RefreshDataGrid();
}
}
唯一的问题是每次激活窗口时都会触发事件。
实现此目的的另一种方法是在调用表单1时将表单1的引用传递给表单2并从表单2触发表单1中的公共事件
public class Form1 : Window {
public Form1() {
InitializeComponent();
Form2 f2 = new Form2(this);
}
public void RefreshDataGrid() {
// Refresh DataGrid Here
}
}
public class Form2 : Window {
private Form1 Form1Ref;
public Form2(Form1 f1) {
Form1Ref = f1;
}
void Form2_Closing(object sender, CancelEventArgs e) {
if (Form1Ref != null) Form1Ref.RefreshDataGrid();
}
}
对任何错误道歉。代码是徒手写的。
答案 3 :(得分:0)
在你的胜利1:
public MainWindow()
{
InitializeComponent();
LoadDatagrid();
}
public void LoadDatagrid()
{
LagerDBEntities1 dataEntities = new LagerDBEntities1();
var query =
from product in dataEntities.Artikel
select new { product.Id, product.artikelname, product.bestand };
dataGrid1.ItemsSource = query.ToList();
}
切换到赢取2时更改您的代码:
Window2 Auslagern = new Window2(currbestand, artikelid, artikelname);
Auslagern.Show();
this.Close();
然后当你从win 2切换回win1时:
MainWindow Main = new MainWindow();
Main.Show();
this.Close();
public MainWindow()
将负责刷新数据网格