【 C#重构】——构造方法在修改信息传值时的应用

本文介绍了一种不使用全局变量实现窗体间数据传递的方法,通过构造方法和实体类,实现了DataGridView选中行数据的修改操作。详细解析了数据在查询窗体与修改窗体之间的三次赋值过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个构造方法的应用,来自于一个问题:不用全局变量怎么跨窗体传值?

  • 目的:
    在DataGridView控件中选择单行后进行修改操作
  • 正向逻辑:
    选中单行,点击<修改>控件——把选中的单行信息——传递到 “修改学生信息”窗体的对应文本框中——在“修改学生信息”窗体上进行Select和Update操作。
  • 逻辑分析:
    这里涉及到了三次赋值和实例化

第一次:在查询窗体:实体变量=单行信息

//实例化实体层的studentinfo
            Entity.StudentInfo student = new Entity.StudentInfo();

 //把选中的DataGiveView单行字段 赋值 给 实体
            student.StudentID = Convert.ToInt32 (dgvCollect.CurrentRow.Cells["studentID"].Value.ToString());
            student.Studentname = dgvCollect.CurrentRow.Cells["studentname"].Value.ToString();
            student.Balance = Convert.ToInt32  (dgvCollect.CurrentRow.Cells["balance"].Value);
            student.Ischeck = dgvCollect.CurrentRow.Cells["ischeck"].Value.ToString();
            student.State = dgvCollect.CurrentRow.Cells["state"].Value.ToString();
            student.Status = dgvCollect.CurrentRow.Cells["status"].Value.ToString();

第二次:在修改窗体:窗体控件=实体变量

 //窗体显示实体层传进来的值
           txtBalance.Text = Convert.ToString (student.Balance);
           txtStudentName.Text= student.Studentname;
           txtStudnetID.Text = Convert.ToString (student.StudentID);

           cmbIscheck.Text = student.Ischeck;
           cmbState.Text = student.State;
           cmbStatus.Text= student.Status;

第三次:在修改窗体,Update操作:实体变量=窗体控件修改后内容

 //保存修改内容,进行实例化赋值
                Entity.StudentInfo student = new Entity.StudentInfo();

                student.Balance =Convert.ToInt32 (txtBalance.Text.Trim());
                student.Studentname= txtStudentName.Text.Trim();
                student.StudentID=Convert.ToInt32(txtStudnetID.Text.Trim());
                student.Ischeck =cmbIscheck.Text.Trim();
                student.State=cmbState.Text.Trim();
                student.Status =cmbStatus.Text.Trim();

                student.Head = Convert.ToString(glbVariables.glbUserID);
 //把公共获取的UserID传递给刚刚实例化的——再传递给D层

主要目的是,把查询窗体信息,传到修改窗体

  1. 第一个想到的就是全局变量,声明全局变量,如上第一次获得的值全部实例化,然后在第二次传递的时候可以直接使用
  2. 还有一个巧妙地应用构造方法直接给刚刚实例化的对象赋值,方便后面传值

修改窗体

public partial class frmTMoStudent : Form
    {
        //实例化窗体frmTMoStudent后,实例化实体层
        Entity.StudentInfo student = new Entity.StudentInfo();
        //定义主键变量,方便进行Select操作
        int userID;
        //类的构造方法的实现,把上一个窗体传的实参赋值给构造方法的形参
        public frmTMoStudent(Entity .StudentInfo student,int ID)
        {
            this.student = student;
            this.userID = ID ;
            InitializeComponent();
        }
        //窗体加载成功,显示修改人ID,显示实体层传进来的值
        private void frmTMoStudent_Load(object sender, EventArgs e)
        {
           。。。   
        }

        //确定修改操作 
        private void button1_Click(object sender, EventArgs e)
        {
            。。。
        }

        //取消操作
        private void btnCancel_Click(object sender, EventArgs e)
        {
           。。。
        }

        //退出当前窗体,返回,显示查询学生信息窗体
        private void btnUnLoad_Click(object sender, EventArgs e)
        {
         。。。
        }

        //确定修改
        private void button1_Click_1(object sender, EventArgs e)
        {
            //判空
            if (txtBalance.Text ==""||txtStudentName .Text ==""||txtStudnetID .Text ==""||cmbIscheck .Text ==""||cmbState .Text ==""|| cmbStatus .Text =="")
            {
                //提示不可以为空
            }
            //如果不为空
            else
            {
                //把公共获取的UserID传递给刚刚实例化的——再传递给D层
                student.UserID =userID;
            }
        }
    }

组合查询窗体的修改click事件

	private void btnModify_Click(object sender, EventArgs e)
        {
            //选择一行进行修改
            if (dgvCollect.CurrentRow==null)
            {
                MessageBox.Show("请选择学生记录后,再执行修改");
                return;
            }
            //实例化实体层的studentinfo
		。。。
            //把选中的DataGiveView单行字段 赋值 给 实体
		。。。
            //通过主键唯一标识这一行
            int  userID = Convert.ToInt32 (dgvCollect.CurrentRow.Cells["userID"].Value.ToString());
            //跳转窗体,实例化修改窗体,而且必须和构造方法对应,给构造方法提供实参
            frmTMoStudent frmModifyStudent = new frmTMoStudent(student,userID );
            frmModifyStudent.Show();
        }

构造方法

什么是构造方法?
再温习一下:又名构造函数,对类进行初始化,和类名相同,无方绘制,也不需要void,在new时候调用
如图
在这里插入图片描述
在这里插入图片描述
我们创建的每一个窗体都有一个默认的部分,一个空的默认的构造方法。如果你有定义的构造方法,那么那个默认的构造方法就失效了。

这样组合窗体中有的值通过实参,赋值到修改窗体上的形参。给初始实例化窗体frmTMoStudent就有了值。

感谢你的赞,如有不同意见,欢迎讨论交流!

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢美玲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值