前言:
当前同学们对“c语言文件的修改”大致比较关切,各位老铁们都需要剖析一些“c语言文件的修改”的相关知识。那么小编在网络上汇集了一些有关“c语言文件的修改””的相关知识,希望你们能喜欢,你们快快来了解一下吧!#头条创作挑战赛#
界面与控件简介
首先说声抱歉,程序中没有使用昨天说的单例窗体(实现起来代码看着比较绕,等之后使用数据库再细说)此次使用的方式更易理清内在逻辑也更便于理解
简单说下窗体界面中各个控件的作用:
1 文本框2个作用(Name属性值:txtStuname):
1.1显示文本:在单元格的事件中选中哪行单元格,将其对应文本赋值给文本框显示
1.2输入文本:在选中与修改按钮的单击事件中获取输入文本框的文本
为文本框添加一个TextChanged事件,用于还原文本框背景色
2 两个ComboBox组合框控件(通过属性设置为下拉列表框的功能)
Name属性值: cmbCname(左侧) cmbSer(右侧)
2.1 左侧的组合框:在新增与修改事件中用于获取当前选中的信息
2.2 右侧的组合框:用于查询学员按钮的事件事件中,根据选定的选项查询出对应数据
它们自身都有一个SelectedIndexChanged事件,在事件中设置/获取学员信息
3 四个按钮都有一个单击事件,在事件中编写相应的实现代码
Name属性值:btnAdd/btnDel/btnMod/btnSer/btnAll(增删改查/重新全部)
以上控件全部位于容器控件GroupBox控件中
4 最下面是用于每次增删改查操作后要显示数据的DataGridView(dgvStudent)
此控件添加一个CellClick事件.在事件中用于获取当前选中学员的编号Sid并将对应信息赋值给文本框与左侧的组合框
自定义集合数据
使用一个类文件(Datas.cs)作为程序的数据源
public class Datas { //定义静态集合类型的字段,作为数据源 //学员数据 public static List<Student> studata = Datas.GetStu(); //返回自定义的数据 public static List<Student> GetStu() { List<Student> ls = new List<Student>(); ls.Add(new Student() { sId = 1, sCId = 1, sName = "张三", SCname = "C#" }); ls.Add(new Student() { sId = 2, sCId = 2, sName = "李四", SCname = "Java" }); ls.Add(new Student() { sId = 3, sCId = 1, sName = "王五", SCname = "C#" }); ls.Add(new Student() { sId = 4, sCId = 2, sName = "马六", SCname = "Java" }); ls.Add(new Student() { sId = 5, sCId = 3, sName = "赵启", SCname = "C语言" }); ls.Add(new Student() { sId = 6, sCId = 1, sName = "王伟", SCname = "C#" }); ls.Add(new Student() { sId = 7, sCId = 2, sName = "张开印", SCname = "Java" }); ls.Add(new Student() { sId = 8, sCId = 3, sName = "黎星刻", SCname = "C语言" }); ls.Add(new Student() { sId = 9, sCId = 1, sName = "宋柯键", SCname = "C#" }); return ls; } //班级分组数据 public static List<Class> cladata = Datas.GetCla(); private static List<Class> GetCla() { //班级数据 List<Class> lc = new List<Class>(); lc.Add(new Class() { CId = 1, CName = "C#" }); lc.Add(new Class() { CId = 2, CName = "Java" }); lc.Add(new Class() { CId = 3, CName = "C语言" }); return lc; } }设置dgvStudent与组合框控件属性
1)AutoSizeColumnsMode:设置为 full,作用:将单元格的列宽撑满dgvStudent控件
2)SelectionMode:设置为 FullRowSelect,作用:只能选中一整行
3)MultiSelect:设置为 false,作用:不允许选中多行
设置两个组合框控件的DropDownStyle属性为DropDownList,作用:只能选择组合框中的选项,不能修改其选项中的值
添加事件实现功能
1 为窗体添加Load 加载事件,将学员与班级分组数据绑定在对应控件上
//声明为窗体类 FMain 的成员变量 List<Class> cladata;//班级分组数据 List<Student> studata;//学员数据 int Sid = 0;//设置/获取学员编号 int Cid = 0;//设置/获取班级id string SCname = "";//设置/获取班级名称 //加载事件private void FMain_Load(object sender, EventArgs e){ //获取班级数据 studata = Datas.studata; //绑定数据到dgvStudent控件上 BindingSource bs = new BindingSource(); bs.DataSource = studata; dgvStudent.DataSource = bs; //获取班级数据 cladata = Datas.cladata; //绑定左侧的组合框控件上 cmbCname.DataSource = cladata; //默认选中组合框的第一项 cmbCname.SelectedIndex = 0; //将班级数据复制一份给右侧的组合框 //作用:防止两个组合框出现联动 Class[] cs = new Class[cladata.Count]; cladata.CopyTo(cs); cmbSer.DataSource = cs; cmbSer.SelectedIndex = 0; }
2 新增按钮单击事件
只添加姓名与班级Id与班级名称,编号这类数据的值一般都是一条记录的唯一标识,常由数据库,随机数,Guid等方式进行赋值,不会让用户进行编辑输入
private void btnAdd_Click_1(object sender, EventArgs e){ //为学生添加一个编号 int sid = studata.Count + 1; //获取学员姓名文本框的文本 string sname = txtStuname.Text.Trim(); //如何文本框为空,使文本框背景色变红,用于提示用户输入文本 if (string.IsNullOrEmpty(sname)) { txtStuname.BackColor = Color.Red; //文本框为空时,程序不再执行事件中其他的代码 return; } //获取左侧组合框中的班级id //SelectedIndex 索引 从0开始,因此加1 int cid = cmbCname.SelectedIndex + 1; //获取组合框中的班级名称 string cname = cmbCname.SelectedValue.ToString(); //将获取的数据加入集合中 { 语法糖 } Student stu=new Student() { sId = sid, sName = sname, sCId = cid, SCname = cname }; studata.Add(stu); //重新绑定数据,就会显示刚刚新增的学员信息 BindingSource bs = new BindingSource(); bs.DataSource = studata; dgvStudent.DataSource = bs;}
//当新增,修改操作的文本框为空时变红//输入内容时设置文本框背景色为白色private void txtStuname_TextChanged(object sender, EventArgs e) { txtStuname.BackColor = Color.White; }
2 删除选中的学员信息
删除信息的逻辑:首先在dgvStudent控件的CellClick事件中获取要删除的学员编号,通过编号,"删除"该编号的学员信息,最后重新绑定数据
//dgvStudent控件的第一个单击事件private void dgvStudent_CellClick(object sender, DataGridViewCellEventArgs e){ //得到第一行的数据 DataGridViewRow dr = dgvStudent.SelectedRows[0]; //通过第一行第一列得到学员编号 Sid = Convert.ToInt32(dr.Cells[0].Value); //得到学员姓名 txtStuname.Text = dr.Cells[1].Value.ToString(); //得到班级的 Cid Cid = Convert.ToInt32(dr.Cells[2].Value); //改变左侧组合框的索引值,达到联动效果 cmbCname.SelectedIndex = Cid - 1;}
删除按钮的单击事件
private void btnDel_Click(object sender, EventArgs e){ if (Sid == 0) { MessageBox.Show("请先选择要删除的学员"); return; } else { //获取"删除"后的数据 studata = StuList(Sid); //重新绑定(可以放在一个方法中) BindingSource bs = new BindingSource(); bs.DataSource = studata; dgvStudent.DataSource = bs; }}//将对应学员编号的数据过滤掉//达到"删除"选中编号学员信息的效果private List<Student> StuList(int sid) { List<Student> ls = new List<Student>(); for (int i = 0; i < studata.Count; i++) { if (sid != studata[i].sId) { ls.Add(studata[i]); } } return ls; }
3 修改学员信息
3.1 为左侧组合框注册SelectedIndexChanged索引发生改变事件
private void cmbCname_SelectedIndexChanged(object sender, EventArgs e){ //获取改变班级分组后的 班级的编号 Cid = cmbCname.SelectedIndex + 1; //获取改变班级分组后的 班级的名称 SCname = cmbCname.SelectedValue.ToString(); }
3.2 修改按钮的单击事件
private void btnMod_Click(object sender, EventArgs e){ //通过循环找到选中学员的编号 //如何修改该学员的信息 for (int i = 0; i < studata.Count; i++) { if (Sid == studata[i].sId) { //根据学员编号,修改学员相应的信息 studata[i].sName = txtStuname.Text.Trim(); studata[i].sCId = Cid; studata[i].SCname = SCname; } } //重新绑定数据 BindingSource bs = new BindingSource(); bs.DataSource = studata; dgvStudent.DataSource = bs;}
4 查询学员数据
4.1为右侧的组合框注册SelectedIndexChanged索引发生改变的事件
private void cmbSer_SelectedIndexChanged(object sender, EventArgs e){ //只需得到班级分组的班级id即可 Cid = cmbSer.SelectedIndex + 1;}
4.2 查询各个分组的学员信息
private void btnSer_Click(object sender, EventArgs e){ List<Student> ls = new List<Student>(); for (int i = 0; i < studata.Count; i++) { //通过循环筛选出与左侧班级id相同的学员数据 if (Cid == studata[i].sCId) { ls.Add(studata[i]); } } //重新绑定 BindingSource bs = new BindingSource(); //注意:绑定的数据源 不再是 studata bs.DataSource = ls;//绑定筛选出来的数据 dgvStudent.DataSource = bs;}
5 查询全部按钮单击事件
private void btnAll_Click(object sender, EventArgs e){ //用于分组查询信息后 //重新查看全部已有数据 BindingSource bs = new BindingSource(); bs.DataSource = studata; dgvStudent.DataSource = bs;}
现今所做的增删改查任一的操作,每次重启软件后,dgvStudent控件中显示的数据就会还原为原始数据(只存在内存中),除非将数据进行持久化处理(存储在磁盘上)
小结:
1)新增按钮:包括按钮的单击事件与文本框的内容改变事件
2)修改按钮:包括按钮单击事件与左侧组合框的索引改变事件
3)删除按钮:包括按钮单击事件与单元格单击事件
4)查询按钮:包括按钮单击事件与右侧组合框索引发生改变事件
示例中所有不是单击事件中代码的作用几乎都是为Sid/Cid/Sname/Cname赋值或取值
标签: #c语言文件的修改