将选定的datagridview项显示在另一个表单上的文本框c#

时间:2015-05-20 10:26:35

标签: c# winforms

我正在设计一个pos系统,要求用户从列表中选择位于另一个表单上的产品,该列表在datagridview中生成。我现在需要的是当我点击datagridview列表上的项目时,它应该显示在pos表单的文本框中。我有以下代码,但它没有将值传递给表单

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    POS pos = new POS();
    pos.txtProductCode.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
    pos.txtProductName.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
    this.Hide();
}

提前感谢。

3 个答案:

答案 0 :(得分:1)

如果POS是你的表格,你应该展示它。

更改'this.Hide();'到'POS.Show()'

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    POS pos = new POS();
    pos.txtProductCode.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
    pos.txtProductName.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
    pos.Show();
}

它应该有用!

修改

此外,如果您的POS表单已经可见,并且表单中已打开了dataGridView,那么您应该使用对所有者表单的引用。

POS表格:

private void buttonOpenProductList_Click(object sender, EventArgs e)
{
    var productListForm = new ProductListForm(); // It is form with DataGridView
    productListForm.Show(this); // Set owner form
}

ProductList表单(带有DataGridView的表单):

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    POS pos = (POS)this.Owner;
    pos.txtProductCode.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
    pos.txtProductName.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
    this.Close();
}

ctor示例:

POS表格:

private void buttonOpenProductList_Click(object sender, EventArgs e)
{
    var productListForm = new ProductListForm(this); // It is form with DataGridView
    productListForm.Show();
}

ProductList表单(带有DataGridView的表单):

private POS pos;
// Constructor of ProductListForm
public ProductListForm(POS pos)
{
    this.pos = pos;
}

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    pos.txtProductCode.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
    pos.txtProductName.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
    this.Close();
}

答案 1 :(得分:0)

您必须创建要发布到的表单的实例,例如:

Form f2 = new Form();

f2.TextBox1.Text = somevalue;

现在您可以访问您发布的表单上的TextBox等控件。您可以为它们分配值。

请注意本指南。

答案 2 :(得分:0)

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    POS pos = new POS();
    pos.txtProductCode.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
    pos.txtProductName.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
    pos.Show();
}

让文本框是公开的

其他明智的方法是添加一种方法来填充POS中的数据。

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    POS POS = null;
    FormCollection fc = Application.OpenForms;
    foreach (Form frm in fc)
    {
        if (frm.GetType().Name.Equals("POS"))
        {
            POS = frm as POS;
        }
    }
    if (POS == null)
    {
        POS = new POS();
    }
    string ProductCode = dataGridView1.CurrentRow.Cells[0].Value.ToString();
    string ProductName = dataGridView1.CurrentRow.Cells[1].Value.ToString();

    POS.FillTextBoxes(ProductCode, ProductName);
    POS.Show();
}
POS中的

internal  void FillTextBoxes(string productCode, string productName)
{
     txtProductCode.Text = productCode;
     txtProductName.Text = productName;
}

单击文本时CellContentClick工作。最好将其更改为dataGridView1_CellClick或CellDoubleClick。

POS.Show()也会在每次点击时创建一个新表格。因此,如果适合您的情况,请应用POS.ShowDialog()。