C#学生管理系统——班级列表(查询功能)

C#学生管理系统——班级管理的班级列表(查询功能)

上次的年级列表做好了,今天就来做班级管理中的班级列表,与年级列表不同的是,班级列表增加了查询功能,如下图:在这里插入图片描述

界面布局部分:

简单写下,查询这个浅色的框框是GroupBox,其功能是带有标题的框框(只是为了美观,没啥卵用),年级这些都是Label标签,选择年级的下拉菜单框用combobox,班级textbox,查询按钮button。
下半部分因为要显示出来表格的样子,和上次年级列表的界面设置一样,不多写,控件Datagridview。

给要用到的几个控件起名字:
年级的下拉菜单——cmbgrade
班级的textbox——textclass
下半部分信息展示的表格Datagridview——dgvclass

数据库:
数据库起名为class,有4个关键信息,如下图:
cid——班级编号,
cname——班级名称,
gid——年级编号(后面要与年级表连接),
remark——备注。
在这里插入图片描述

功能实现部分:

首先当我们点开班级列表这个界面的时候,就要自动加载出班级的下拉菜单和总的班级列表,调用两个初始化函数:

private void list_class_Load(object sender, EventArgs e)
        {
    
    
         
            initgrade();   //初始化加载年级列表
            initclass();   //初始化加载班级列表
        }

初始化年级列表:
大致思路是:下拉菜单需要Datatable来获取,指定给cmbclass
1.写sql语句来获取年级信息,Datatable来获取sql语句:

 string sql = "select * from [grade]";
 DataTable dtgrade = sqlhelper.getDataTable(sql);

2.获取grade表中数据

 //获取grade表中数据
            cmbgrade.DataSource = dtgrade;        //comboBox来获取datatable 
            cmbgrade.DisplayMember = "gname";       //设置绑定的数据库对应的名称,显示的内容
            cmbgrade.ValueMember = "gid";

3.(附加步骤)默认情况下显示“请选择“;

 //默认“请选择“;添加一行
            DataRow drow = dtgrade.NewRow();
            drow["gid"] = 0;
            drow["gname"] = "请选择";
            dtgrade.Rows.InsertAt(drow, 0); //使dt.Rows.Add(dr)只是把选项追加到最后,而使用dt.Rows.InsertAt(dr, 0)可以把增加的选项插入到相应的位置上

初始化班级列表:
这里初始化加载要显示出编号,班级,年级信息,需要数据库中表class的gid和表grade中的gid相匹配进而展示出年级名称,数据库用到了inner join…on来关联两个表。

			string sql = "SELECT cid, cname, gname FROM class c INNER JOIN grade g ON c.gid = g.gid ORDER BY c.cid";
            DataTable dclass = sqlhelper.getDataTable(sql);
            dgvclass.DataSource = dclass;

初始化完成后只剩下查询功能了,接下来写复杂的查询按钮:

查询按钮功能设计:

1.获取用户输入信息
注意这里!!!用SelectedValue获取下拉菜单框的数据是object类型,你可以强制转换下试试,但我的VS不识别总报错,费了很大功夫查到可以ToString来获取string格式,最后再转化为int类型,实在想不到其他方法了,如果有人看到后,有高见,请私信我呀。

int setid=(int)cmbgrade.SelectedValue

  string _value = cmbgrade.SelectedValue.ToString();
  int setgid = int.Parse(_value);
  string setclass = textclass.Text.Trim();

2.判断获取的数据是否为空

不管是否为空,我们都要用到初始化班级的sql语句,因为展示的内容一样,所以上个sql语句后加个where 1=1来表示该sql语句恒成立
判断获取的setid是否为0,不为0,则在sql语句加上条件,输入的年级id与表中年级id匹配,同理判断获取的setclass是否为空,进行模糊查询。

 string sql = "select c.cid, c.cname, g.gname from (class  c INNER JOIN grade g ON c.gid = g.gid) where 1=1 ";
            //判断
            if (setgid != 0)
            {
    
    
                sql += " and c.gid=@gid";
                
            }
            if (!string.IsNullOrEmpty(setclass))
            {
    
    
                sql += " and cname like @cname";
            }
            //定义参数数组 进行传参

            OleDbParameter[] paras ={
    
    
                                     new OleDbParameter("@gid",setgid),
                                     new OleDbParameter("@cname","%"+setclass+"%")
                                 };

            DataTable dclass = sqlhelper.getDataTable(sql,paras);
            dgvclass.DataSource = dclass;

注意这里模糊查询的问题:在sql语句中不加%,最后在传参时加%才有效。
到这里这部分就写完了,运行:
在这里插入图片描述学生列表与班级列表相似,下次只写一点心得,布局和功能实现不多写。
附:今天的完整代码:

   private void list_class_Load(object sender, EventArgs e)
        {
    
    
         
            initgrade();   //初始化加载年级列表
            initclass();   //初始化加载班级列表
        }



        private void initgrade()
        {
    
    

            //下拉菜单也要datatable来获取,然后指定给comboBox
            //用displaymember来show显示的值
            string sql = "select * from [grade]";
            DataTable dtgrade = sqlhelper.getDataTable(sql);

            //默认“请选择“;添加一行
            DataRow drow = dtgrade.NewRow();
            drow["gid"] = 0;
            drow["gname"] = "请选择";
            dtgrade.Rows.InsertAt(drow, 0); //使用dt.Rows.Add(dr)只是把选项追加到最后,而使用dt.Rows.InsertAt(dr, 0)可以把增加的选项插入到相应的位置上

           //获取grade表中数据
            cmbgrade.DataSource = dtgrade;        //comboBox来获取datatable 
            cmbgrade.DisplayMember = "gname";       //设置绑定的数据库对应的名称,显示的内容
            cmbgrade.ValueMember = "gid";


        }

        private void initclass()
        {
    
    
            string sql = "SELECT cid, cname, gname FROM class c INNER JOIN grade g ON c.gid = g.gid ORDER BY c.cid";
            DataTable dclass = sqlhelper.getDataTable(sql);
            dgvclass.DataSource = dclass;
        }


        //查询
        private void btncha_Click(object sender, EventArgs e)
        {
    
    
           
            //获取输入信息
            string _value = cmbgrade.SelectedValue.ToString();
            int setgid = int.Parse(_value);

            string setclass = textclass.Text.Trim();

            string sql = "select c.cid, c.cname, g.gname from (class  c INNER JOIN grade g ON c.gid = g.gid) where 1=1 ";
            //判断
            if (setgid != 0)
            {
    
    
                sql += " and c.gid=@gid";
                
            }
            if (!string.IsNullOrEmpty(setclass))
            {
    
    
                sql += " and cname like @cname";
            }
            //定义参数数组 进行传参

            OleDbParameter[] paras ={
    
    
                                     new OleDbParameter("@gid",setgid),
                                     new OleDbParameter("@cname","%"+setclass+"%")
                                 };

            DataTable dclass = sqlhelper.getDataTable(sql,paras);
            dgvclass.DataSource = dclass;
        }

猜你喜欢

转载自blog.csdn.net/qq_42740834/article/details/105794180
今日推荐