C#学生管理システム - クラス一覧(クエリ機能)

C#学生管理システム - 授業管理の授業一覧(クエリ機能)

前回の成績表が完成しました。今日はクラス管理でクラス一覧を作成します。クラス一覧には、成績表とは異なり、以下に示すようにクエリ機能があります。ここに画像の説明を挿入します

インターフェースレイアウト部分:

簡単に書き留めて、クエリを実行します。この明るい色のボックスは GroupBox です。その機能はタイトル付きのボックスです (見た目だけのため、役に立ちません)。グレードはラベル ラベルです。コンボボックス、クラス テキストボックスを使用してグレードのドロップダウン メニュー ボックスを選択します。クエリボタンボタン。
下部は表を表示する必要があるので、前回の成績表のインターフェース設定と同じで、何も書かずにDatagridviewを制御します。

使用するいくつかのコントロールに名前を付けます:
グレードのドロップダウン メニュー -
cmbgrade クラスのテキストボックス -
テキストクラスの下半分の情報を表示するテーブル Datagridview - dgvclass

データベース:
データベースには class という名前が付けられ、次の図に示すように 4 つの重要な情報があります:
cid - クラス番号、
cname - クラス名、
gid - 成績番号 (後で成績表に関連付けられます)、
remark - 備考。
ここに画像の説明を挿入します

機能実装部分:

まず、クラス リスト インターフェイスをクリックすると、クラスのドロップダウン メニューと全クラス リストが自動的にロードされ、2 つの初期化関数が呼び出されます。

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

成績リストの初期化:
一般的な考え方は、ドロップダウン メニューを取得するには Datatable が必要であり、cmbclass
1 に割り当てられます。 成績情報を取得する SQL ステートメントと SQL ステートメントを取得する Datatable を記述します。

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

2. 成績表のデータを取得する

 //获取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)可以把增加的选项插入到相应的位置上

クラス リストの初期化:
ここでの初期ロードでは、番号、クラス、およびグレードの情報を表示する必要があります。グレード名を表示するには、データベース内のクラス テーブルの gid がグレード テーブルの gid と一致する必要があります。データベースは内部結合を使用します。 ...2 つのテーブルを関連付けます。

			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 を使用して取得されたドロップダウン メニュー ボックスのデータはオブジェクト型です。強制変換を試すことはできますが、私の VS はそれを認識せず、常にエラーを報告します。多くの努力の結果、ToString を使用して次のことができることがわかりました。文字列形式を取得し、最後に int 型に変換します。これ以外の方法は本当に思いつきません。これを見て何か提案がある場合は、プライベート メッセージを送ってください。

int setid=(int)cmbgrade.SelectedValue

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

2. 取得したデータが空かどうかを判断します

空であるかどうかに関係なく、SQL ステートメントを使用してクラスを初期化する必要があります。表示される内容は同じなので、SQL ステートメントが常に true であることを示すために、前の SQL ステートメントの後に where 1=1 を追加します。いいえ、
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;
        }

Supongo que te gusta

Origin blog.csdn.net/qq_42740834/article/details/105794180
Recomendado
Clasificación