繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM