2010-03-18 2 views
4

J'ai un datagridview avec le contenu d'une table. Dans ce que j'ai une colonne pour les remarques qui seront 1-2 lignes. Lorsque je clique sur la colonne remarques, je veux ouvrir un autre formulaire qui contient la zone de texte. J'ai lié la zone de texte avec la table en utilisant l'adaptateur de table. Maintenant, lorsque je ferme le formulaire avec la zone de texte, je veux l'afficher dans la colonne datagridview. S'il vous plaît aidez-moiComment mettre à jour la colonne de datagridview à partir du contenu du texte de la zone de texte dans C# formulaire Windows

+0

Je devine que c'est la seconde moitié du casse-tête pour une question que vous avez posée plus tôt? http://stackoverflow.com/questions/2459465/ –

+0

En regardant votre question une deuxième fois - persistez-vous vos données à la base de données à partir du deuxième formulaire et souhaitez actualiser votre DataGridView une fois ce formulaire est fermé? Si tel est le cas, vous pouvez faire quelque chose de similaire à ma réponse, mais dans la méthode que vous passez en tant que délégué, vous pouvez simplement actualiser votre source de données DataGridView pour qu'elle retourne dans la base de données. –

Répondre

0

Si votre DataGridView est attaché à une table avec un TableAdapter vous devez mettre à jour la cellule vous-même, puis appelez update pour repasser les données dans la table ou vous pouvez mettre à jour la table depuis la boîte de dialogue le DataGridView.

4

La façon dont j'ai fait cela dans le passé est de passer un délégué d'action au second formulaire qui fait référence à une méthode du premier formulaire.

La méthode que vous transmettez contient la logique qui met à jour votre DataGridView.

Ensuite, dans votre deuxième événement de fermeture de formulaire, vous appelez ce délégué (après avoir vérifié qu'il n'est pas NULL) en transmettant la valeur de votre zone de texte. Ci-dessous, un code de prototype rapide pour montrer comment faire ceci. Ma méthode de Form1 affiche simplement une boîte de message, mais vous pouvez facilement modifier cela pour mettre à jour votre source de données DataGridView.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 form = new Form2(); 
     Action<string> showMessage = ShowMessage; 
     form.ClosingMethod(showMessage); 
     form.Show(); 
    } 

    private void ShowMessage(string message) 
    { 
     MessageBox.Show(message); 
    } 
} 

public partial class Form2 : Form 
{ 
    private Action<string> _showMessage; 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public void ClosingMethod(Action<string> showMessage) 
    { 
     _showMessage = showMessage; 
    } 

    private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (_showMessage != null) 
     { 
      _showMessage("hippo"); 
     } 
    } 
} 

Modifier

Juste me est apparu que l'appel au délégué _showMessage("hippo"); bloque.

Votre formulaire ne sera pas fermé tant que le participant n'aura pas terminé son travail - potentiellement longtemps. Dans mon exemple de boîte de message, le formulaire ne se ferme pas tant que le bouton OK n'est pas cliqué.

Pour contourner ce problème, vous pouvez appeler votre délégué de façon asynchrone comme indiqué ci-dessous:

private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (_showMessage != null) 
    { 
     _showMessage.BeginInvoke("hippo", null, null); 
    } 
} 
+0

Merci pour votre réponse – user286546

Questions connexes