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)
{
}
}