我有一个包含表格内容的数据网格视图。在那里我有一个备注栏,它将是1-2行。当我单击备注列时,我想打开另一个包含文本框的表单。我已使用表适配器将文本框与表链接。现在当我用文本框关闭表单时,我想在datagridview列中显示它。请帮帮我
答案 0 :(得分:4)
我过去这样做的方法是将Action委托传递给第二个表单,该表单引用第一个表单中的方法。
传入的方法包含更新DataGridView的逻辑。
然后在你的第二个表单关闭事件中,你调用这个委托(在检查它不是null之后)从你的文本框中传递值。
下面是一些快速原型代码,展示如何执行此操作。我在Form1中的方法只显示一个消息框,但您可以轻松更改它以更新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");
}
}
}
修改强>
我突然想到代理人_showMessage("hippo");
的电话被阻止了。
在代表完成之前,您的表单不会关闭 - 可能需要很长时间。在我的消息框示例中,在单击“确定”按钮之前,表单不会关闭。
要解决此问题,您可以异步调用您的委托,如下所示:
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if (_showMessage != null)
{
_showMessage.BeginInvoke("hippo", null, null);
}
}
答案 1 :(得分:0)
如果你的DataGridView附加到带有TableAdapter的表,你必须自己更新单元,然后调用update将数据推回到表中,或者你可以从对话框更新表,然后刷新DataGridView。 / p>