如何从c #Windows窗体中的文本框的文本内容更新datagridview列

时间:2010-03-18 22:54:18

标签: c# winforms datagridview

我有一个包含表格内容的数据网格视图。在那里我有一个备注栏,它将是1-2行。当我单击备注列时,我想打开另一个包含文本框的表单。我已使用表适配器将文本框与表链接。现在当我用文本框关闭表单时,我想在datagridview列中显示它。请帮帮我

2 个答案:

答案 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>