如何将数据从datagridview提取到另一个表单的文本框

时间:2016-10-01 14:04:25

标签: c# database datagridview textbox

我正在尝试将数据从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;    
            }

2 个答案:

答案 0 :(得分:1)

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

using (Form1 f= new Form1())

由于我无法看到您的整个代码,我可能错了 - 但我认为这很可能不是您想要的。

您真正想要的是在GetX()的现有实例上致电Form1

现在您需要某种方式来了解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实例,这将无法正常工作并产生不良副作用。在这种情况下,需要另一种方法。但我希望你现在知道可能出现的问题,你可以解决它。

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

答案 1 :(得分:0)

更改了Form2;

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

在Form1中;

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

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