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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xml1996/article/details/84306599

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

  • 目的:
    在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就有了值。

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

猜你喜欢

转载自blog.csdn.net/xml1996/article/details/84306599