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

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

先上效果图

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

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

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

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

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

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

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

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

下面是关键代码

父窗体的实例化

 public static BookManager bManager;//静态实例化对象

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

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

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.DLL
            OracleConnection 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调用父窗体数据

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,一些表述可能不准,还望各位多多理解。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值