如何将值从DataGridView传递到另一个窗体文本框
本文关键字:另一个 窗体 文本 DataGridView | 更新日期: 2023-09-27 18:20:31
我现在可以传输put的值,问题是在switch的情况下,我进行switch可以将数据传输到多个表单put只有打开的表单put我不能在switch中这样做,它在运行时会转到默认情况,所以问题在(FORMID)我如何在这里正确使用switch case这是我的form1代码
public partial class Form1 : Form
{
Form2 f2 = new Form2();
public Form1()
{
InitializeComponent();
f2.setParent(this);
f2.MdiParent = this.MdiParent;
}
private void button1_Click(object sender, EventArgs e)
{
f2.Show();
f2.Activate();
}
}
}
这个表2代码:
public partial class Form2 : Form
{
public int FORMID = 0;
private Form1 f1;
private Form3 f3;
DataTable dt;
public Form2()
{
InitializeComponent();
}
void load_table()
{
string constring = "Data Source =.; initial Catalog = business; Integrated Security=SSPI;";
SqlConnection CN = new SqlConnection(constring);
SqlCommand cmd = new SqlCommand("select * from T_AKARAT_BUILDING_TP", CN);
try
{
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cmd;
dt = new DataTable();
sda.Fill(dt);
BindingSource bsource = new BindingSource();
bsource.DataSource = dt;
dataGridView1.DataSource = bsource;
sda.Update(dt);
}
catch { }
}
private void Form2_Load(object sender, EventArgs e)
{
load_table();
}
public void setParent(Form1 parentValue)
{
f1 = parentValue;
}
public void setParent(Form3 parentValue)
{
f3 = parentValue;
}
private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
switch (FORMID)
{
case 1:
f1.textBox1.Text = dt.Rows[dataGridView1.CurrentCell.RowIndex][0].ToString();
f1.textBox2.Text = dt.Rows[dataGridView1.CurrentCell.RowIndex][1].ToString();
this.Hide();
break;
case 2:
f3.textBox1.Text = dt.Rows[dataGridView1.CurrentCell.RowIndex][0].ToString();
f3.textBox2.Text = dt.Rows[dataGridView1.CurrentCell.RowIndex][1].ToString();
this.Hide();
break;
default:
MessageBox.Show("plz select");
break;
}
this.Hide();
}
}
}
我在表单2中设置了文本框修饰符public,但这段代码不起作用&我不知道这里缺了什么或错了什么希望能帮助我
希望有人能纠正我没有给出例子的代码,请
要做到这一点,您可以使用创建类1.cs类中的代码,例如:
class Class1
{
public string firstName;
public string lastName;
public Class1 FirstName(string firstname)
{
this.firstName = firstname;
return this;
}
public Class1 LastName(string lastname)
{
this.lastName = lastname;
return this;
}
}
表1:中的代码
Class1 c = new Class1();
private void button1_Click(object sender, EventArgs e)
{
c.firstName = dataGridView1.CurrentRow.Cells[1].Value.ToString();
c.lastName = dataGridView1.CurrentRow.Cells[2].Value.ToString();
}
现在您可以将此代码用于所有程序
另一种形式的示例:
label1.text = c.firstName;
label2.text = c.lastName;
好运
另一种方法是,在form2中定义两个公共变量,在form1中将该值设置为这些变量,然后在form2中输入事件将这些变量设置为文本框
为文本框赋值应该按照您的方式进行。但是,您的代码没有调用FDAS.Show.
还有您的关闭form1,因此您可能需要声明一个新的form1来设置父
在cellmousedoubleclick事件中尝试,我输入的名称只是示例,只有您可以更改为自己的名称:
private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
Form2 f2 = new Form2();
f2.textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
f2.Show();
}
如果textbox的访问修饰符是公共的,则会执行此操作。
这2个示例将您的2个文本框文本放置到1º示例-列值-,2º示例-行值。
private void dataGridView1_ColumnHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
Form2 f2 = new Form2();
f2.textBox1.Text = dataGridView1.Rows[0].Cells[e.ColumnIndex].FormattedValue.ToString();
f2.textBox2.Text = dataGridView1.Rows[1].Cells[e.ColumnIndex].FormattedValue.ToString();
f2.Show();
}
private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
Form2 f2 = new Form2();
f2.textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue.ToString();
f2.textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells[1].FormattedValue.ToString();
f2.Show();
}
也许是这样的。。FDAS必须首先声明为Form类
public void setParent()
{
FDAS = form2;
}
不幸的是,您没有说明哪行代码导致了"对象引用未设置"异常。而且,由于我们无法看到您的所有代码,我们必须猜测问题可能在哪里。
当您实例化Form2时,您必须设置它的MdiParent属性。然而,您在Form2构造函数中使用了MdiParent属性(这也不正确):
public form2()
{
InitializeComponent();
// neither one of the following lines make any sense, get rid of them
//form1.setParent(this);
//form1.MdiParent = this.MdiParent;
}
您没有显示在Form1中实例化Form2的代码,但需要这样做:
// somewhere in Form1
Form2 FDAS = new Form2();
FDAS.MdiParent = this;
此外,因为form1是一个MdiParent,我认为当你关闭()它时也会出错,所以我不确定你为什么要这么做!