WinFrom开发小案例
C#
开发环境:
VisualStudio2015
数据库:
SQLserver2008
程序主界面:
注释:
lbl标签:
程序中的lbl标签:编号、人数、姓名、性别、请输入要查询的信息,这里他们只起到了说明作用,所有命名一般为默认,只修改Text文本。
程序中的lbl标签:编号后面的0,他起到了同步表中选中人员的id(编号) 人数后面的0,他的作用是时时更新表中总人数,他们的命名要规范,后面的代码才能编写更方便。
按钮:
程序中的btn按钮:保存、重置、退出、添加、查询,要想实现他们的功能,就得双击他们然后在里面打上代码,才能赋予他们功能,这里要注意按钮的命名规范。
保存按钮功能:
程序运行时,在姓名TextBox文本框中、性别TextBox文本框中,分别输入人员的姓名、性别,然后按保存按钮,人员的信息就被存到了数据库中。
运行图:
保存按钮代码:
if (checkinput()) { using (SqlConnection con = new SqlConnection(conStr)) { con.Open(); string sql = "insert B(name,sex) values (@name,@sex)"; SqlCommand cmd = new SqlCommand(sql, con); cmd.Parameters.Add(new SqlParameter("@name", txtname.Text)); cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text)); int fh = cmd.ExecuteNonQuery(); if (fh > 0) MessageBox.Show("添加成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); sj(); rs(); } }
这里调用了检测输入的完整性方法:checkinput,如果姓名TextBox文本框或性别TextBox文本框中,姓名没输入,程序会提示请输入姓名,性别没输入,程序会提示请输入性别。
检测输入的完整性方法代码:
private bool checkinput() { if (txtname.Text == null || txtname.Text == "") { MessageBox.Show("请输入姓名", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error); txtname.Focus(); return false; } if (txtsex.Text == null || txtsex.Text == "") { MessageBox.Show("请输入性别", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error); txtsex.Focus(); return false; } return true; }
信息输入不完整运行效果图:
保存按钮的代码里还调用了,sj();rs();这两个方法,sj();这个方法起到了刷新添加人员的信息到DGV表格中,rs();这个方法起到了更新lbl人数标签后面的数据功能,更新了总人数的数据信息。
新加一个人员运行图:
信息输入完整添加成功,大家看人数后面的数字是:12,当我按确定以后,神奇的事情就发生了!
人数后面的数字12变成了13,这里就是因为保存按钮里调用了,rs();这个方法所以才有更新数据的功能
rs();方法的代码:
private void rs() { using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=sa;database=YG")) { con.Open(); string sql = "select count(*)from B"; SqlCommand cmd = new SqlCommand(sql, con); object cx = cmd.ExecuteScalar(); //lblRS.Text = cx.ToString(); 将查询到的结果同步标签 lblrs.Text = cx.ToString(); //将查询到的结果同步到lbl标签 } }
新保存的人员数据,马上就能在DGV表格中找到:
这是因为保存按钮代码里调用了,sj();这个方法,将新保存的人员信息更新到了DGV表格中。
sj();方法的代码:
private void sj() { SqlConnection con = new SqlConnection(conStr);//创建连接对象指定连接字符串 string sql = "select*from B";//sql查询语句 SqlDataAdapter cx = new SqlDataAdapter(sql, con);//连接数据库并执行sql语句 DataTable ta = new DataTable();//创建表对象 cx.Fill(ta);//将查询的内容填充到表对象 dataGridView1.DataSource = ta;//设置DGV表的数据来源 }
保存按钮代码:
if (checkinput())//调用检测输入的完整性方法 { using (SqlConnection con = new SqlConnection(conStr))//创建连接对象,指定连接字符串 { con.Open();//打开连接 string sql = "insert B(name,sex) values (@name,@sex)";//SQL语句,在数据库里要执行的操作 SqlCommand cmd = new SqlCommand(sql, con);//Cmand命名对象执行操作 cmd.Parameters.Add(new SqlParameter("@name", txtname.Text));//指定参数跟对应的数据匹配 cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text));//指定参数跟对应的数据匹配 int fh = cmd.ExecuteNonQuery();//ExecuteNonQuery(),这个方法在执行增、删、改的时候就调用它 if (fh > 0) MessageBox.Show("添加成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); sj();//调用这个方法更新DGV表格中的数据 rs();//调用这个方法更行lbl总人数的数据 } }
SqlCommand对象的三个方法:
ExcuteScalar():
这个方法只返回查询结果集的第一行第一列
ExcuteNonQuery():
执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、修改、删除操作
ExcuteReader():
查询多行多列
重置按钮的代码:
lblid.Text = "0";//lbl文本默认为0 txtname.Clear();//将Text文本框的内容清空 txtsex.Clear();//将Text文本框的内容清空 txtname.Focus();//设置焦点
运行图:
输入好信息后,点击重置按钮就会清空输入的信息
退出按钮的代码:
Application.Exit();
点击退出后,程序就会被关闭。
添加按钮代码:
添加人员 a = new 添加人员();//创建窗体对象 a.ShowDialog();//以对话框模式弹出 sj();//调用sj();这个方法来更新添加的人员数据到DGV表格中
这里添加按钮的功能跟保存按钮的功能是类似的,目的都是为了添加人员数据,只不过我们在这里做了一点代码知识的扩展。
运行图:
输入的信息不完整的话,会提示请输入完整的信息,这里也得写一个检测输入完整性的方法,信息输入完整后就可以点击保存了,保存按钮的代码和上面的类似,点击返回按钮后当前窗体就会关闭返回到人员管理主界面。
将SQL数据库中的数据读取到程序的DGV表格中代码:
private void sj() { SqlConnection con = new SqlConnection(conStr);//创建连接对象指定连接字符串 string sql = "select*from B";//sql查询语句 SqlDataAdapter cx = new SqlDataAdapter(sql, con);//连接数据库并执行sql语句 DataTable ta = new DataTable();//创建表对象 cx.Fill(ta);//将查询的内容填充到表对象 dataGridView1.DataSource = ta;//设置DGV表的数据来源 }
其实这个方法在前面就已经出现过了,当我们新增一个人员的时候,就得调用sj();这个方法来更新DGV表格中的数据。
查询按钮代码:
SqlConnection con = new SqlConnection(conStr);//创建连接对象指定连接字符串 //string sql = "select * from B where name like '%"+ txtcx.Text + "%'"; string sql = string.Format("select*from B where name like'%{0}%' or sex like'%{1}%' or id like'%{2}%'",txtcx.Text,txtcx.Text,txtcx.Text);//SQL语句根据TextBox输入的查询条件进行模糊查询 DataTable b1 = new DataTable();//创建表对象 SqlDataAdapter cx1 = new SqlDataAdapter(sql, con);//连接数据库并执行sql语句 cx1.Fill(b1);//将查询的内容填充到表对象 dataGridView1.DataSource = b1;//设置DGV表的数据来源
运行图:
在TextBox文本框中,根据姓查询这里输入了一个:刘 DGV表格中就会显示所有姓刘的人员信息
运行图:
在TextBox文本框中,根据性别查询这里输入了一个:男 DGV表格中显示了所有性别为男的信息。
那么功能都差不多快完善了,我们会发现有了新增,却少了删除跟修改的功能!!!
运行图:
在这里我们可以在DGV表格里加一个上下文菜单,来实现修改和删除的功能。
右键菜单中修改按钮的代码:
添加人员 a = new 添加人员();//创建窗体对象 a.Text = "修改人员";//将添加人员的窗体Text文本修改为“修改人员” a.Tag = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString();//将选中的数据传递给修改人员窗体 a.txtname.Text = dataGridView1.SelectedRows[0].Cells["name"].Value.ToString();//DGV表中选中的人员名字传递到修改人员窗体 a.txtsex.Text = dataGridView1.SelectedRows[0].Cells["sex"].Value.ToString();///DGV表中选中的人员性别传递到修改人员窗体 a.ShowDialog();//以对话框模式弹出
运行图:
修改人员的窗体与点击添加按钮弹出的窗体是同一个窗体,这里只不过是用代码修改了窗体的Text文本而已,DGV表中选中的数据也同步到了修改人员窗体对应的Text文本框中,在这里我们只需要直接修改那些要修改的地方就KO了。
运行图:
修改人员窗体中保存按钮代码:
if (checkinput()) { if (this.Text == "添加人员") { using (SqlConnection con = new SqlConnection(conStr)) { con.Open(); string sql = "insert B(name,sex) values (@name,@sex)"; SqlCommand cmd = new SqlCommand(sql, con); cmd.Parameters.Add(new SqlParameter("@name", txtname.Text)); cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text)); int fh = cmd.ExecuteNonQuery(); if (fh > 0) MessageBox.Show("添加成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.Close(); } } else { using (SqlConnection con = new SqlConnection(conStr)) { con.Open(); //update<修改对象所在表> set < 修改对象 >=< 值 > where < 条件对象 >=< '条件内容' > string sql = "update B set name=@name,sex=@sex where id=@id"; SqlCommand cmd = new SqlCommand(sql, con); cmd.Parameters.Add(new SqlParameter("@id", this.Tag.ToString())); cmd.Parameters.Add(new SqlParameter("@name", txtname.Text)); cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text)); int fh = cmd.ExecuteNonQuery(); if (fh > 0) MessageBox.Show("修改成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.Close(); } } }
修改人员中的保存按钮代码,跟点击添加按钮弹出的窗体中保存按钮代码一致,逻辑可能一时难以领悟,多看几遍就熟能生巧了!
右键菜单中删除按钮的代码:
if (dataGridView1.SelectedRows.Count > 0) { string xz = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString(); using (SqlConnection con = new SqlConnection(conStr)) { con.Open(); string sql = string.Format("delete from B where id='{0}'", xz); SqlCommand cmd = new SqlCommand(sql, con); int fh = cmd.ExecuteNonQuery(); if (fh > 0) { MessageBox.Show("删除成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); sj(); rs(); } else { MessageBox.Show("删除失败!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error); sj(); rs(); } }
增、删、改、查,的代码流程都大致相同:首先创建连接对象指定连接字符串,打开连接、sql语句在数据库里要做什么操作(增、删、改、查)、然后创建Command命令对象连接数据库并执行sql语句,定义一个变量来接收方法的返回值,增、删、改操作时,调用ExecuteNonQuer这个方法,查询操作时,一般调用的是ExcuteReader这个方法,要做的操作不同,调用的方法也会不同,定义变量时也得定义匹配这个方法的变量。