2013-03-20 102 views
7

上时,我有2种形式,其是form Aform BC#刷新的DataGridView更新或插入的另一种形式

form A allowes用户插入和更新学生信息。

form b只是一个DataGridView和按钮。

当我插入学生上form A,然后我去form B,新的学生没有显示在DataGridView的,如果我重新运行该程序,新的学生将出现在form B

我试图在表格B

datagridview1.refresh(); 
datagridview1.update(); 

按钮使用这一点,但它仍然没有工作。


编辑:

我插入一个工人

cmd = new OleDbCommand("insert into FWINFOS (ID,Name,Gender,DateOfBirth,Race,WorkingPlace,PassportNO,DateOfExpire,[Position],Photo) values('" + textBox5.Text + "','" + textBox1.Text + "','" + textBox2.Text + "','" + dateTimePicker1.Value + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox6.Text + "','" + dateTimePicker2.Value + "',@Position,@Photo)", con); 


     cmd.Parameters.AddWithValue("@Position", comboBox1.SelectedText.ToString()); 
     conv_photo(); 

     con.Open(); 
     int n = cmd.ExecuteNonQuery(); 
     //cmd.ExecuteNonQuery(); 
     con.Close(); 
     if (n > 0) 
     { 
      MessageBox.Show("Inserted"); 
      loaddata(); 

      rno++; 
     } 
     else 
      MessageBox.Show("No Insert"); 



    } 

代码我Datagridview1(Form2)当我插入一个新的工作不会自动更新。但是,如果我重新运行应用程序,则会显示新工作人员。

+0

筹集形式2一事件,处理它在形式上1再次检索你的GridView数据 – NoviceProgrammer 2013-03-20 15:06:01

+0

@NoviceProgrammer,我能有例子吗? – 2013-03-20 15:13:30

+0

问题已解决。谢谢大家! – 2013-03-22 01:37:01

回答

10
// Form A 
public void loaddata() 
{ 
    //do what you do in load data in order to update data in datagrid 
} 

然后在表格B定义:

// Form B 
FormA obj = (FormA)Application.OpenForms["FormA"]; 

private void button1_Click(object sender, EventArgs e) 
{ 
    obj.loaddata(); 
    datagridview1.Update(); 
    datagridview1.Refresh(); 
} 
+0

所以我必须在窗体A上创建一个按钮..是否有其他方法? – 2013-03-20 14:23:43

+0

你必须在表单A上触发一个新的数据输入的事件,所以数据网格必须更新...必须在表单A中完成... – apomene 2013-03-20 14:25:07

+0

基本上有一个替代方案....... – apomene 2013-03-20 14:28:47

2

DataGridView.Refresh和而DataGridView.Update是被从控制继承的方法。他们必须重新绘制控制,这就是为什么新行没有出现。

我的猜测是数据检索在Form_Load上。如果你想让Form B上的Button从数据库中检索最新的数据,那么这就是Form_Load正在做的事情。

一个很好的方法是将你的数据检索调用分离成一个单独的函数,并从From Load和Button Click事件中调用它。

1

把一个简单的例子,应该是足够的起点

代码中,形式A

public event EventHandler<EventArgs> RowAdded; 

private void btnRowAdded_Click(object sender, EventArgs e) 
{ 
    // insert data 
    // if successful raise event 
    OnRowAddedEvent(); 
} 

private void OnRowAddedEvent() 
{ 
    var listener = RowAdded; 
    if (listener != null) 
     listener(this, EventArgs.Empty); 
} 

代码表格B

private void button1_Click(object sender, EventArgs e) 
{ 
    var frm = new Form2(); 
    frm.RowAdded += new EventHandler<EventArgs>(frm_RowAdded); 
    frm.Show(); 
} 

void frm_RowAdded(object sender, EventArgs e) 
{ 
    // retrieve data again 
} 

你甚至可以考虑创建自己的EventArgs类可以包含新添加的数据。然后,您可以用它来直接将数据添加到一个新的行中的DataGridView

+0

没有为我工作:在你的'MessageBox.Show(“Inserted”);'调用'OnRowAddedEvent();' Ma之后S – 2013-03-20 15:48:05

+0

Ma请确保您以其他形式订阅活动 – NoviceProgrammer 2013-03-20 15:50:28

+0

我们可以通过Skype或MSN聊天吗? SKYPE:JKT MSN:jun[email protected] – 2013-03-20 15:55:23

1

对于datagridview的在C#中,使用此代码

con.Open(); 
MySqlDataAdapter MyDA = new MySqlDataAdapter(); 
string sqlSelectAll = "SELECT * from dailyprice"; 
MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, con); 

DataTable table = new DataTable(); 
MyDA.Fill(table); 

BindingSource bSource = new BindingSource(); 
bSource.DataSource = table; 


dataGridView1.DataSource = bSource; 
con.Close(); 

它适用于在DataGridView显示新记录。

1

用于刷新数据的GridView在任何地方,你只需要验证码:

datagridview1.DataSource = "your DataSource"; 
datagridview1.Refresh(); 
1

我的datagridview是editonEnter模式。所以它只有在我离开细胞后或者在我重新访问并退出细胞两次之后才会刷新。

触发此iimedately。我从datagridview没有重点。然后重新调整它。

this.SelectNextControl(dgv1,true,true,false,true);  
Application.DoEvents(); //this does magic 
dgv1.Focus(); 
相关问题