龙空技术网

C# - 自定义集合数据实现增删改查操作 111

源丁编程 932

前言:

当前同学们对“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语言文件的修改