J'ai un dgv sur mon formulaire principal, il y a un bouton qui ouvre un autre formulaire pour insérer des données dans la source de données liée au dgv. Je veux quand le formulaire enfant ferme le rafraîchissement automatique de dgv. J'ai essayé d'ajouter ceci dans l'événement de clôture du formulaire enfant, mais cela ne rafraîchit pas:
private void frmNew_FormClosing(object sender, FormClosingEventArgs e)
{
frmMain frmm = new frmMain();
frmm.itemCategoryBindingSource.EndEdit();
frmm.itemsTableAdapter.Fill(myDatabaseDataSet.Items);
frmm.dataGridView1.Refresh();
}
Cependant, lorsque j'ajoute ce code dans un bouton du formulaire parent, le problème est résolu:
this.itemCategoryBindingSource.EndEdit();
this.itemsTableAdapter.Fill(myDatabaseDataSet.Items);
this.dataGridView1.Refresh();
Il existe plusieurs façons de procéder, mais voici la plus simple. Elle fera ce que vous voulez et vous permettra de démarrer.
public partial class Form1 : Form {
public Form1() {
//'add a label and a buttom to form
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
Form2 oForm = new Form2(this);
oForm.Show();
}
public void PerformRefresh() {
this.label1.Text = DateTime.Now.ToLongTimeString();
}
}
public class Form2 : Form {
Form1 _owner;
public Form2(Form1 owner) {
_owner = owner;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form2_FormClosing);
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e) {
_owner.PerformRefresh();
}
}
Vous créez une nouvelle instance du formulaire principal qui n'affecte pas l'instance principale du formulaire. Ce que vous devez faire, c'est appeler le code sur le formulaire principal lui-même, tout comme le code que vous dites fonctionne sur le clic du bouton:
private void frmNew_FormClosing(object sender, FormClosingEventArgs e)
{
this.itemCategoryBindingSource.EndEdit();
this.itemsTableAdapter.Fill(myDatabaseDataSet.Items);
this.dataGridView1.Refresh();
}
Super réponse là-bas! L'autre méthode aurait été:
Appelez la méthode pour actualiser votre gridVieW.
** dans votre refreshMethod()
dans form1
assurez-vous de régler datasource
sur null
**
if (System.Windows.Forms.Application.OpenForms["Form1"]!=null)
{
(System.Windows.Forms.Application.OpenForms["Form1"] as Form1).refreshGridView("");
}
Nous pouvons aussi procéder de cette façon:
Nous avons formulaire_1 et formulaire_2
La méthode avec nos données est la méthode qui remplira notre liste form1, dataGridView, comboBox ou ce que nous voulons.
Formulaire 1:
public fillComboBox()//Step 1. This is the method with your stuff in Form1
{
foreach(var item in collection myInfo)
{myComboBox.Items.Add(item)}
}
Form_2:
Form1 instanceForm1;//Step 2
public Form2(Form1 theTransporter)//Step 3. This the Form2 contructor.
{
InitializeComponent();
instanceForm1 = theTransporter;//Step 4
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
instanceForm1.fillComboBox();//Step 5 we call the method to execute the task updating the form1
}
J'espère que ça aide ...