[英]How to update the column of datagridview from the text contents of textbox in c# Windows form
我有一个datagridview与表中的内容。 在那里我有一个备注栏,它将是1-2行。 当我单击备注列时,我想打开另一个包含文本框的表单。 我已使用表适配器将文本框与表链接。 现在当我用文本框关闭表单时,我想在datagridview列中显示它。 请帮我
我过去这样做的方法是将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");
的调用_showMessage("hippo");
阻止。
在代表完成之前,您的表单不会关闭 - 可能需要很长时间。 在我的消息框示例中,在单击“确定”按钮之前,表单不会关闭。
要解决此问题,您可以异步调用您的委托,如下所示:
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if (_showMessage != null)
{
_showMessage.BeginInvoke("hippo", null, null);
}
}
如果您的DataGridView附加到具有TableAdapter的表,则以太必须自己更新单元,然后调用update将数据推回到表中,或者您可以从对话框更新表,然后刷新DataGridView。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.