WinForm DataGridView增刪改查


DataGridView連接數據庫對表進行增刪改查

 

一、綁定數據源

        //做一個變量控制頁面刷新
        public static int bs = 0;

        public Form1()
        {
            InitializeComponent();
        }
        
        private void Form1_Load(object sender, EventArgs e)
        {
            JianSanDA da = new JianSanDA();
            
            //綁定數據源           
            dataGridView1.DataSource = da.Select();
            //設置不自動生成列
            dataGridView1.AutoGenerateColumns = false;
            //取消默認第一行
            dataGridView1.ClearSelection(); 
                    
            JSchoolDA sch = new JSchoolDA();

            //給chaschool指定數據源
            chaschool.DataSource = sch.Select();
            //指定顯示的值
            chaschool.DisplayMember = "Sname";
            //后台的value值
            chaschool.ValueMember = "Scode";


            JSchool data = new JSchool();//添加一列
            data.Scode = "qxz";
            data.Sname = "全門派";

            List<JSchool> list = sch.Select();
            list.Add(data);

            chaschool.DataSource = list;
            chaschool.DisplayMember = "Sname";
            chaschool.ValueMember = "Scode";

           chaschool.SelectedValue = "qxz"; 
        }
        

 

二、查詢

 

1.JianSanDA里面的多條件查詢方法:(注意條件前后加空格)

//根據多條條件查詢(重載)
        public List<JianSan> Select(string name, string school)
        {
            //做兩個恆成立的條件
            string cx1 = " 1=1 ";
            string cx2 = " 1=1 ";
            //根據用戶輸入的條件判斷查詢
            if (name != "")//輸入了姓名
            {
                cx1 = " Name like @name ";
            }
            if (school != ""&&school !="qxz")//輸入了門派且不是全門派
            {
                cx2 = " School = @school ";
            }
            //拼接成完整條件
            string cx = " where "+cx1+" and "+cx2;
            List<JianSan> list = new List<JianSan>();
            _cmd.CommandText = "select * from JianSan " + cx;
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@name","%"+name+"%");
            _cmd.Parameters.AddWithValue("@school",school);
            _conn.Open();
            _dr = _cmd.ExecuteReader();
            if (_dr.HasRows)
            {
                while (_dr.Read())
                {
                    JianSan data = new JianSan();
                    data.Code = _dr[0].ToString();
                    data.Name = _dr[1].ToString();
                    data.Sex = Convert.ToBoolean(_dr[2]);
                    data.School = _dr[3].ToString();
                    data.Birthday = Convert.ToDateTime(_dr[4]);

                    list.Add(data);
                }
            }
            _conn.Close();
            return list;
        }

 

2.主窗口查詢代碼:

//查詢
        private void button4_Click(object sender, EventArgs e)
        {
            //取數據
            string name = chaname.Text;
            string school = chaschool.SelectedValue.ToString();
            //根據查詢條件,把結果交給datagridview1顯示
            //首先需要重載查詢方法
            JianSanDA da = new JianSanDA();
            dataGridView1.DataSource = da.Select(name, school);
            dataGridView1.AutoGenerateColumns = false;
        }

 

三、添加

 

1.打開新窗體:

//添加
        private void button1_Click(object sender, EventArgs e)
        {
            //打開添加窗口
            TianJia tj = TianJia.NewTianJia();
            //顯示窗體
            tj.Show();
        }

 

2.JianSanDA類添加代碼:

 

        //添加數據
        public void Add(string code,string name,bool sex,string school,DateTime birthday)
        {
            _cmd.CommandText = "insert into JianSan values(@code,@name,@sex,@school,@birthday)";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@code",code);
            _cmd.Parameters.AddWithValue("@name", name);
            _cmd.Parameters.AddWithValue("@sex", sex);
            _cmd.Parameters.AddWithValue("@school", school);
            _cmd.Parameters.AddWithValue("@birthday", birthday);

            _conn.Open();
            _cmd.ExecuteNonQuery();
            _conn.Close();
        }

 

 

 

3.子窗體添加界面代碼:

    public partial class TianJia : Form
    {
        //儲存該類的對象 控制數量
        private static TianJia tj = null;

        private TianJia()
        {
            InitializeComponent();
        }
       //返回對象的方法 一個窗口
        public static TianJia NewTianJia()
        {
            if (tj == null || tj.IsDisposed)
            {
                tj = new TianJia();
            }
            return tj;
        }
        private void TianJia_Load(object sender, EventArgs e)
        {
            //給下拉列表綁定值
            JSchoolDA jda = new JSchoolDA();
            cbschool.DataSource = jda.Select();
            cbschool.DisplayMember = "Sname";
            cbschool.ValueMember = "Scode";
        } 
        //確定修改
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBoxButtons btn = MessageBoxButtons.YesNoCancel;
            if (MessageBox.Show("確定要添加嗎?", "添加數據", btn) == DialogResult.Yes)
            {
                string _code = txtcode.Text;
                string _name = txtname.Text;
                bool _sex = rdnan.Checked;
                string _school = cbschool.SelectedValue.ToString();
                DateTime _birthday = Convert.ToDateTime(txtbirthday.Text);

                JianSanDA jda = new JianSanDA();
                jda.Add(_code, _name, _sex, _school, _birthday);

                //給Form1的成員變量bs賦值 刷新頁面
                Form1.bs = 1;

                //關閉窗口
                this.Close();
            }
        }
    }

 

四、刪除

※刪除加確認
MessageBoxButtons btn = MessageBoxButtons.YesNoCancel;
if (MessageBox.Show("確定要刪除么?", "刪除數據", btn) == DialogResult.Yes)
{

}

 

1.主窗口刪除代碼:

//刪除
        private void button2_Click(object sender, EventArgs e)
        {
            //讓用戶選擇是否刪除
            MessageBoxButtons btn = MessageBoxButtons.YesNoCancel;
            if (MessageBox.Show("確定要刪除數據嗎?", "刪除數據", btn) == DialogResult.Yes)
            {
                //取出選中行里面綁定的對象
                JianSan data = dataGridView1.SelectedRows[0].DataBoundItem as JianSan;
                //初始化數據訪問類 調用刪除方法刪除數據
                JianSanDA da = new JianSanDA();
                da.Delete(data.Code);

                //確定刪除的同時刷新數據
                dataGridView1.DataSource = da.Select();
            }
        }

 

2.JianSanDA類刪除代碼:

 

        //刪除數據
        public void Delete(string code)
        {
            _cmd.CommandText = "delete from JianSan where Code=@code";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@code",code);
            
            _conn.Open();
            _cmd.ExecuteNonQuery();
            _conn.Close();
        }

 

 

 

五、修改

 

1.主窗體修改代碼:

 //修改
        private void button3_Click(object sender, EventArgs e)
        {
            //判斷是否有選中項
            if (dataGridView1.SelectedRows.Count > 0)
            {
                //取出選中項的主鍵值
                JianSan zj = dataGridView1.SelectedRows[0].DataBoundItem as JianSan;
                //打出修改窗體                
                //XiuGai xg = new XiuGai();——應用單例模式控制只出現一個修改窗口
                XiuGai xg = XiuGai.NewXiuGai(zj.Code);
                //顯示窗體
                xg.Show();
                //讓修改窗體屬於Form1
                //xg.Owner = this;
                //讓修改窗體獲得焦點
                //xg.Focus();
            }
            else
            {
                MessageBox.Show("沒有選中任何項!");
            }
        }

 

2.子窗體修改代碼:

public partial class XiuGai : Form
    {
        //用來存儲傳遞來的主鍵值
        private string Code = "";
        
        //用來存儲該類的對象(控制一個窗口)
        private static XiuGai xg = null;

        public XiuGai()
        {
            InitializeComponent();
        }
        //構造一個有參數的方法
        public XiuGai(string code)
        {
            InitializeComponent();
            this.Code = code;
        }
        //返回對象的方法  單例模式
        public static XiuGai NewXiuGai(string code)
        {
            if (xg == null || xg.IsDisposed)
            {
                xg = new XiuGai(code);
            }
            return xg;
        }

        private void XiuGai_Load(object sender, EventArgs e)
        {
            //給下拉列表綁定值
            JSchoolDA sda = new JSchoolDA();
            cbschool.DataSource = sda.Select();
            cbschool.DisplayMember = "Sname";
            cbschool.ValueMember = "Scode";

            //對界面內容進行初始化
            JianSanDA da = new JianSanDA();
            JianSan data = da.Select(Code);
            txtcode.Text = data.Code;
            txtname.Text = data.Name;
            rdnan.Checked = data.Sex;
            rdnv.Checked = !data.Sex;
            //改下拉列表(school)設置選中項
            cbschool.SelectedValue = data.School;
            txtbirthday.Text = data.Birthday.ToString("yyyy-MM-dd");
        }
        //確定修改數據
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBoxButtons btn = MessageBoxButtons.YesNoCancel;
            if (MessageBox.Show("確定要修改嗎?", "修改數據", btn) == DialogResult.Yes)
            {
                string _code = txtcode.Text;
                string _name = txtname.Text;
                bool _sex = rdnan.Checked;
                string _school = cbschool.SelectedValue.ToString();
                DateTime _birthday = Convert.ToDateTime(txtbirthday.Text);

                JianSanDA jda = new JianSanDA();
                jda.Update(_code, _name, _sex, _school, _birthday);

                //給Form1的成員變量bs賦值 調用刷新數據
                Form1.bs = 1;

                //關閉窗口
                this.Close();           
            }
        }
    }

 

3.JianSanDA類中的修改代碼:

 

        //修改數據
        public void Update(string code,string name,bool sex,string school,DateTime birthday)
        {
            _cmd.CommandText = "update JianSan set Name=@name,Sex=@sex,School=@school,Birthday=@birthday where Code=@code";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@code",code);
            _cmd.Parameters.AddWithValue("@name", name);
            _cmd.Parameters.AddWithValue("@sex", sex);
            _cmd.Parameters.AddWithValue("@school", school);
            _cmd.Parameters.AddWithValue("@birthday", birthday);

            _conn.Open();
            _cmd.ExecuteNonQuery();
            _conn.Close();
        }

 

 

 

 

六、做一個Timer控件控制刷新

 //用timer 刷新 修改和添加完的數據
        private void timeshuaxin_Tick(object sender, EventArgs e)
        {
            if (bs == 1)
            {
                JianSanDA da = new JianSanDA();
                dataGridView1.DataSource = da.Select();
                bs = 0;
            }
        }

 

※數據區別顯示
//遍歷datagridview里面行的集合,取出每一個行
foreach (DataGridViewRow row in dataGridView1.Rows)
{
//將該行里面綁定的數據項取出
Info data = row.DataBoundItem as Info;

//判斷是不是男女
if (data.Sex)
{
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM