如何将数据从datagridview拉到另一个表单's文本框

本文关键字:表单 文本 另一个 数据 datagridview | 更新日期: 2023-09-27 18:09:52

我正试图将数据从form1中的datagridview值拉到form2中的文本框。

形式1;

        public string xxx;
        public string GetX()
        {
            return xxx;
        }      
        private void addADocumentToolStripMenuItem_Click(object sender, EventArgs e)
        {                 
            if (dataGridView1.SelectedRows != null)
            {
                xxx = dataGridView1.CurrentRow.Cells["Name"].Value.ToString();
                AddDocumentForm adf = new AddDocumentForm();
                adf.ShowDialog();
            }
            else
            {
                MessageBox.Show("Please choose a record.");
                return;
            }
        }

在表单2中尝试将xxx值拉入文本框;

using (Form1 f= new Form1())
            {                    
                string result= f.GetX();
                txtSavedDocumentID.Text = result;    
            }

如何将数据从datagridview拉到另一个表单's文本框

Form2中,您正在创建Form1的新实例:

using (Form1 f= new Form1())

由于我不能看到你的全部代码,我可能是错的-但我认为这很可能不是你想要的。

您实际需要的是在Form1的现有实例上调用GetX()

现在你需要一些方法来知道Form1Form2上的正确实例。一种简单的可能性是,,但只有当您总是只使用Form1 的一个实例时,才能在Form1上公开一个静态属性,从而向外部世界提供它的一个单例实例:

public class Form1
{
    // ...
    public static readonly Form1 Instance {get; private set};
    public Form1()
    {
        Instance = this;
    }
    // ...
}

Form2中,不是用using语句创建一个新实例,而是像这样访问它:

string result = Form1.Instance.GetX();
txtSavedDocumentID.Text = result;

现在请注意,如果您的应用程序有可能打开多个Form1实例,那么这将不起作用,并且会产生不良的副作用。在这种情况下,需要另一种方法。但我希望你现在知道可能是什么错了,你可以解决它。

编辑:虽然这将解决你的问题,希望,我想补充的是,这不是一个很好的方法,让你的表单需要了解彼此。您应该在后台有一些模型类,窗体可以在其中读取和写入数据,而不需要彼此直接交互。但进一步探讨这个问题将超出这个问题的范围。

changed Form2;

public Form2(string qs)
        {
            InitializeComponent();
            textBox1.Text = qs;
        }
在Form1;

从组合框中获取文本并传递给form2;

 {
        var xxxx = (cbxEmployeeName.GetItemText(cbxEmployeeName.SelectedItem));
        Form2 f = new Form2(xxxx);
        f.Show();
    }