我正在设计一个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();
}
提前感谢。
答案 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()。