版权声明:本文为博主原创文章,未经博主允许不得转载。 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层
主要目的是,把查询窗体信息,传到修改窗体
- 第一个想到的就是全局变量,声明全局变量,如上第一次获得的值全部实例化,然后在第二次传递的时候可以直接使用
- 还有一个巧妙地应用构造方法直接给刚刚实例化的对象赋值,方便后面传值
修改窗体
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就有了值。
感谢你的赞,如有不同意见,欢迎讨论交流!