AI智能
改变未来

C#.net 子窗口获取父窗口的数据(datagridview)

在最近的学习中涉及到了数据的获取问题,主要问题是子窗体获取父窗体。

先上效果图

这里是连接了Oracle数据库获得的数据

因为接触C#的时间不长,最开始对如何获取父窗体的数据毫无头绪,尝试直接在子窗体调用父窗体的函数,遗憾的报错了。

后来发现调用的父窗体未设置为静态。只有静态的对象才能直接获取控件的数据。

首先静态化父窗体,如果不静态化,动态的窗体只能先实例化,才能被外部访问。实例化new操作相当于创建了新的实例,也就是你获取到的都是新实例的属性而不是原来的(你想得到的)控件的属性。

非静态的成员每个实例都是独立的对象,互不影响,有各自独立的地址。而静态成员的内存地址固定共享。静态成员的属性更改,所有实例都会受到影响。static成员的值,可以被所有其他实例共同使用。

N个实例,如果改变静态的实例,那么N个实例都会因为这个改变产生变动,而动态的只会改变自身。

这就是将父窗体静态化后,可以得到父窗体内控件的属性值的原因,因为他的值是确定的且针对所有。

理解了静态化的作用之后代码就不难写了。我们先静态化父窗体并创建静态实例,在子窗体调用即可得到我们想要的属性。

下面是关键代码

父窗体的实例化

[code] public static BookManager bManager;//静态实例化对象/// <summary>/// reg代表区域 0为西区1为南区2为东区/// 父窗体 BookManager类/// </summary>public int reg = 0;public BookManager(){InitializeComponent();bManager = this;//为实例对象赋值}

父窗体的datagridview(只是表示一个事件)

[code]private void westlib_Click(object sender, EventArgs e){reg = 0;//string westconn = \"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA = (SERVICE_NAME = libwest))); Persist Security Info = True; User ID = west1; Password = qwe123789A; \";//以上为一行,显示为三行// 创建数据集收集数据DataSet dataSet = new DataSet();// Oracle连接函数 需要引用Oracle.ManagedDataAccess.DLLOracleConnection conn = new OracleConnection(westconn);conn.Open();//创建SQL命令 和适配器OracleCommand comm = conn.CreateCommand();comm.CommandText = \"select * from bookwest\";OracleDataAdapter dataAdapter = new OracleDataAdapter();//找到我们想要的命令 fill填满数据集dataAdapter.SelectCommand = comm;dataAdapter.Fill(dataSet);//在dgview上显示this.dataGridView1.DataSource = dataSet.Tables[0].DefaultView;conn.Close();}

子窗体BookInfoModify调用父窗体数据

[code]private void BookInfoModify_Load_1(object sender, EventArgs e){bidlabel.Text = BookManager.bManager.dataGridView1.Rows[BookManager.bManager.dataGridView1.CurrentRow.Index].Cells[0].Value.ToString();bnametextbox.Text = BookManager.bManager.dataGridView1.Rows[BookManager.bManager.dataGridView1.CurrentRow.Index].Cells[1].Value.ToString();bnumTextBox1.Text = BookManager.bManager.dataGridView1.Rows[BookManager.bManager.dataGridView1.CurrentRow.Index].Cells[2].Value.ToString();}

结果图

 

希望能对大家学习有所帮助。本人也是初学C#.net,一些表述可能不准,还望各位多多理解。

smebkoo70原创文章 5获赞 3访问量 295关注私信

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C#.net 子窗口获取父窗口的数据(datagridview)