C〓〓win formの改ページクエリの実現例


1、機能需要
この実例はc萼wiformを通じて簡単な改ページ機能を実現します。必要な基礎知識はSQL文、c俨言語基礎及びc唴wiformの簡単な知識があります。
2、インターフェース設計
これは簡単な改ページクエリのインターフェースであり、任意のフィールドを入力してクエリーを行うことができます。この4つのフィールドはデータ準備において言及されます。全体のインターフェースは図1に示されています。

図1
中間表示はData GridViewで、列とidを編集して、SortModeはAutomaticを選んで、すべての列が自動的にData GridViewに敷き詰められているという意味です。

図2
3、データ準備
この例は削除・修正に関連しているので、データテーブルとデータテーブルを操作するコードが必要です。データベーステーブルは、図3に示すように、それぞれ4つのフィールドがあります。

図3
later.backモデル類対応データベース操作類コードは以下の通りです。

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WindowsFormsApp1.Bean;


namespace WindowsFormsApp1.SqlHelper
{
    class LaterBackHelper
    {
        public LaterBackHelper(){}


        public void insert(LaterBack laterBack)
        {
            string sql = "insert into later_back(dormitory_id,student_no,time,reason) values('" + laterBack.Dormitory_id + "','" + laterBack.Student_no + "'," + "'" + laterBack.Time + "',"
                + "'" + laterBack.Reason + "')";
            try
            {
                int iRet = SqlHelperBase.ExecuteSql(sql);
                if (iRet > 0)
                {
                    MessageBox.Show("    ", "    ");
                }
                else
                {
                    MessageBox.Show("    ", "    ");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }


        public int update(LaterBack laterBack)
        {
            string sql = "update later_back set reason='" + laterBack.Reason + "' where student_no= '" + laterBack.Student_no + "' and"
                + " time = '" + laterBack.Time + "' and " + " dormitory_id= '" + laterBack.Dormitory_id +  "'";
            try
            {
                int iRet = SqlHelperBase.ExecuteSql(sql);//            , int 。                  。
                if (iRet > 0)
                {
                    MessageBox.Show("    ", "    ");
                }
                else
                {
                    MessageBox.Show("    ", "    ");
                }
                return iRet;
            }
            catch (Exception)
            {
                throw;
            }
        }


        public int delete(LaterBack laterBack)
        {
            string sql = "delete from later_back where dormitory_id='" + laterBack.Dormitory_id + "' and" + " student_no= '" + laterBack.Student_no + "' and"
                + " time = '" + laterBack.Time + "' and" + " reason= '" + laterBack.Reason+"'";
            try
            {
                int iRet = SqlHelperBase.ExecuteSql(sql);//            , int 。                  。
                if (iRet > 0)
                {
                    MessageBox.Show("    ", "    ");
                }
                else
                {
                    MessageBox.Show("    ", "    ");
                }
                return iRet;
            }
            catch (Exception)
            {
                throw;
            }
        }


        public List<LaterBack> getAllLaterBacks()
        {
            List<LaterBack> laterBacks= new List<LaterBack>();
            string sql = "select * from later_back";
            MySqlDataReader mySqlDataReader = SqlHelperBase.ExecuteReader(sql);
            while (mySqlDataReader.Read())
            {
                LaterBack laterBack = new LaterBack(int.Parse(mySqlDataReader[0].ToString()), int.Parse(mySqlDataReader[1].ToString()), mySqlDataReader[2].ToString(),
                    mySqlDataReader[3].ToString());
                laterBacks.Add(laterBack);
            }
            mySqlDataReader.Close();
            return laterBacks;
        }
        public List<LaterBack> getAllLaterBacks(int student_no)
        {
            List<LaterBack> laterBacks= new List<LaterBack>();
            string sql = "select * from later_back where student_no ='" + student_no + "'";
            MySqlDataReader mySqlDataReader = SqlHelperBase.ExecuteReader(sql);
            while (mySqlDataReader.Read())
            {
                LaterBack laterBack = new LaterBack(int.Parse(mySqlDataReader[0].ToString()), int.Parse(mySqlDataReader[1].ToString()), mySqlDataReader[2].ToString(),
                    mySqlDataReader[3].ToString());
                laterBacks.Add(laterBack);
            }
            mySqlDataReader.Close();
            return laterBacks;
        }
        public DataSet getAllDataSet()
        {
            string sql = "select * from later_back";
            return SqlHelperBase.GetDataSet(sql);
        }
        //    
        public DataSet getDataSet(LaterBack laterBack)
        {
            string sql="";
            if(laterBack.Student_no != -1)
            {
                if (laterBack.Dormitory_id != -1) sql = "select * from later_back where dormitory_id like '%" + laterBack.Dormitory_id
                          + "%' and student_no like '%" + laterBack.Student_no + "%' and time like '%" + laterBack.Time
                          + "%' and reason like '%" + laterBack.Reason + "%'";
                else sql = "select * from later_back where student_no like '%" + laterBack.Student_no + "%' and time like '%" + laterBack.Time
                          + "%' and reason like '%" + laterBack.Reason + "%'";
            }
            else
            {
                if (laterBack.Dormitory_id != -1) sql = "select * from later_back where dormitory_id like '%" + laterBack.Dormitory_id
                           + "%' and time like '%" + laterBack.Time+ "%' and reason like '%" + laterBack.Reason + "%'";
                else sql = "select * from later_back where time like '%" + laterBack.Time
                          + "%' and reason like '%" + laterBack.Reason + "%'";
            }
            return SqlHelperBase.GetDataSet(sql);
        }
    }
}
4、ソースコードの実現
改ページを実現する時、私の考えは、毎回検索する時に一つのdataset 1を得て、改ページする時に一つのfromを基にします。indexと一つのend_indexは、現在のページに表示されているdataset 2を取得し、dataset 2で現在表示されているデータを更新し、dataset 2で行データの修正と削除をサポートします。このように書くと、あまり適切ではないかもしれませんが、ページ別の機能が完了します。ご参考ください。ソースは以下の通りです

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WindowsFormsApp1.Bean;
using WindowsFormsApp1.CacheUtil;
using WindowsFormsApp1.SqlHelper;

namespace WindowsFormsApp1
{
    public partial class StudentLateBackPanelRightSelect : Form
    {
        private LaterBackHelper laterBackHelper;
        private string []page_counts = { "5","6","7","8","9","10","15","20"};
        private int total_page, page_step, current_page_index, total_count;
        private DataSet dataSet;

        public StudentLateBackPanelRightSelect()
        {
            laterBackHelper = new LaterBackHelper();
            dataSet = laterBackHelper.getAllDataSet();
            total_count = dataSet.Tables[0].Rows.Count;
            page_step = 5;
            total_page = Convert.ToInt16(Math.Ceiling(Convert.ToDouble(total_count) / page_step));
            InitializeComponent();
            
            initView(GetViewDataSet(dataSet,1,5));
            comboBox_page_count.Items.AddRange(page_counts);
            comboBox_page_count.SelectedIndex = 0;
            label_all_item_count.Text = total_count.ToString();
            label_page_count.Text = total_page.ToString();
        }
        //           
        private void initDataPage(int total_count,int page_step,  int current_page_index)
        {
            this.total_count = total_count;
            this.page_step = page_step;
            this.total_page = Convert.ToInt16(Math.Ceiling(Convert.ToDouble(total_count) / page_step));
            this.current_page_index = current_page_index;
        }
        //          
        private void initView(DataSet ds)
        {
            dataGridView.AutoGenerateColumns = false;
            dataGridView.DataSource = ds.Tables[0];
            this.dataGridView.Columns["dor_id"].DataPropertyName = ds.Tables[0].Columns[0].ToString();
            this.dataGridView.Columns["stu_id"].DataPropertyName = ds.Tables[0].Columns[1].ToString();
            this.dataGridView.Columns["time"].DataPropertyName = ds.Tables[0].Columns[2].ToString();
            this.dataGridView.Columns["reason"].DataPropertyName = ds.Tables[0].Columns[3].ToString();
        }
        
        private void button_select_Click(object sender, EventArgs e)
        {
            string stu_id = textBox_stu_id.Text, dor_id = textBox_dor_id.Text, time = textBox_time.Text, reason = textBox_reason.Text;
            if(stu_id.Equals("")&& dor_id.Equals("") && time.Equals("") && reason.Equals(""))
            {
                return;
            }
            if (dor_id.Equals("")) dor_id = "-1";
            if (stu_id.Equals("")) stu_id = "-1";
            LaterBack laterBack = new LaterBack(int.Parse(dor_id), int.Parse(stu_id), time, reason);
            dataSet.Clear();
            dataSet = laterBackHelper.getDataSet(laterBack);
            initDataPage(dataSet.Tables[0].Rows.Count, page_step, 1);
            initView(GetViewDataSet(dataSet, 1, page_step));
            label_page_count.Text = total_page.ToString();
            label_page_range.Text = "1-" + page_step.ToString();
            label_all_item_count.Text = total_count.ToString();
        }
        //      
        private void only_num_press(object sender, KeyPressEventArgs e)
        {
            if (!(Char.IsNumber(e.KeyChar)) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }
        //             
        private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            string action = dataGridView.Columns[e.ColumnIndex].Name;//    
            var cells = dataGridView.Rows[e.RowIndex].Cells;
            LaterBack laterBack = new LaterBack(int.Parse(cells[0].Value.ToString()), int.Parse(cells[1].Value.ToString()), cells[2].Value.ToString(), cells[3].Value.ToString());
            switch (action)
            {
                case "update":
                    //        ID,      ID       Form,    
                   StudentLateBackPanelRightUpdate studentLateBackPanelRightUpdate =  new StudentLateBackPanelRightUpdate(laterBack);
                    studentLateBackPanelRightUpdate.Show();
                    break;
                case "delete":
                    if (MessageBox.Show("         ?", "    ", MessageBoxButtons.OKCancel) == DialogResult.OK)
                    {
                        //        ID,             
                        int result = laterBackHelper.delete(laterBack);
                        if(result > 0)
                        {
                            //dataSet.Clear();
                            dataSet = laterBackHelper.getAllDataSet();
                            initDataPage(dataSet.Tables[0].Rows.Count,page_step,1);
                            initView(GetViewDataSet(dataSet,1,page_step));
                            label_page_count.Text = total_page.ToString();
                            label_page_range.Text = "1-" + page_step.ToString();
                            label_all_item_count.Text = total_count.ToString();
                        }
                    }
                    break;
                default:
                    break;
            }
        }


        //         
        public DataSet GetViewDataSet(DataSet a_ds,int from_index,int end_index)
        {
            //       DataSet     DataTable        
            DataSet l_ds = new DataSet();
            DataTable l_dt = new DataTable();
            //  DataTable     
            l_dt.Columns.Add("dor_id");//         DataSet   ,      
            l_dt.Columns.Add("stu_id");
            l_dt.Columns.Add("time");
            l_dt.Columns.Add("reason");
            
            //      DataSet  ,  DataTable      
            for (int i = from_index - 1; i < end_index ; i++)
            {
                DataRow dr = l_dt.NewRow();//      ,        
                dr["dor_id"] = a_ds.Tables[0].Rows[i][0].ToString().Trim();
                dr["stu_id"] = a_ds.Tables[0].Rows[i][1].ToString().Trim();
                dr["time"] = a_ds.Tables[0].Rows[i][2].ToString().Trim();
                dr["reason"] = a_ds.Tables[0].Rows[i][3].ToString().Trim();
                
                l_dt.Rows.Add(dr);//     add  
            }
            l_ds.Tables.Add(l_dt);//       
            return l_ds;
        }


        //combobox      
        private void combobox_selected_listen(object sender, EventArgs e)
        {
            page_step = int.Parse(comboBox_page_count.SelectedItem.ToString());
            textBox_page_count.Text = 1.ToString();
            label_page_range.Text = "1-" + page_step.ToString();
            total_page = Convert.ToInt16( Math.Ceiling(Convert.ToDouble(total_count) / page_step));
            label_page_count.Text = total_page.ToString();
            initView(GetViewDataSet(dataSet,  1,  page_step));
        }

        //      
        private void page_count_change(object sender, EventArgs e)
        {
            if (textBox_page_count.Text.Equals("")) return;
            if (int.Parse(textBox_page_count.Text) < 1)
            {
                MessageBox.Show("        1", "    ");
                return;
            }
            if (int.Parse(textBox_page_count.Text) > total_page)
            {
                MessageBox.Show("         ", "    ");
                return;
            }
            current_page_index = int.Parse(textBox_page_count.Text);
            var view_range = (current_page_index - 1)* page_step ;
            if (view_range + page_step < total_count) {
                initView(GetViewDataSet(dataSet, view_range + 1, view_range + page_step));
                label_page_range.Text = (view_range + 1).ToString() + "-" + (view_range + page_step).ToString();
            }
            else {
                initView(GetViewDataSet(dataSet, view_range + 1, total_count));
                label_page_range.Text = (view_range + 1).ToString() + "-" + total_count.ToString();
            }

        }

        private void button_first_page_Click(object sender, EventArgs e)
        {
            current_page_index = 1;
            var view_range = (current_page_index - 1) * page_step;
            initView(GetViewDataSet(dataSet, view_range + 1, view_range + page_step));
            label_page_range.Text = (view_range + 1).ToString() + "-" + page_step.ToString();
            textBox_page_count.Text = current_page_index.ToString();
        }


        private void button_previous_page_Click(object sender, EventArgs e)
        {
            if (current_page_index == 1) return;
            current_page_index -= 1;
            var view_range = (current_page_index - 1) * page_step;
            initView(GetViewDataSet(dataSet, view_range + 1, view_range + page_step));
            label_page_range.Text = (view_range + 1).ToString() + "-" + (view_range + page_step).ToString();
            textBox_page_count.Text = current_page_index.ToString();

        }

        private void button_next_page_Click(object sender, EventArgs e)
        {
            if (current_page_index == total_page) return;
            current_page_index += 1;
            var view_range = (current_page_index - 1) * page_step;
            if (view_range + page_step < total_count)
            {
                initView(GetViewDataSet(dataSet, view_range + 1, view_range + page_step));
                label_page_range.Text = (view_range + 1).ToString() + "-" + (view_range + page_step).ToString();
            }
            else
            {
                initView(GetViewDataSet(dataSet, view_range + 1, total_count));
                label_page_range.Text = (view_range + 1).ToString() + "-" + total_count.ToString();
            }
            textBox_page_count.Text = current_page_index.ToString();
        }


        private void button_last_page_Click(object sender, EventArgs e)
        {
            current_page_index = total_page;
            var view_range = (current_page_index - 1) * page_step;
            initView(GetViewDataSet(dataSet, view_range + 1, total_count));
            label_page_range.Text = (view_range + 1).ToString() + "-" + total_count.ToString();
            textBox_page_count.Text = current_page_index.ToString();
        }
    }
}
5、結果
プログラムの実行結果は図4と図5に示すように、各ページ数を変更したり、ページ数を入力しても該当ページにジャンプできます。すべての機能は正常です。ここで簡単なページ分け機能が実現されます。もし何か問題があれば、メッセージをください。

図4

図5
ここでC((zhi wiform)のページごとの検索の実施例についての記事を紹介します。C(zhi)wiformのページごとの検索内容は以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。