大外大三上WinForm考试,瞬间GET新技能~
Catalog
1.文章介绍
2.作者介绍
3.练习1 登陆验证(绑定数据库)
4.练习2 使用DataGridView
5.练习3 添加按钮
6.练习4 删除按钮
7.练习5 双击DataGridView修改学生属性
8.练习6 DataGridView模糊查找
9.练习7 院系实战训练
1.文章介绍
2016-12-23 更新
本人在学校近两年的讲课经验,如今已经毕业了,将之前课程的内容分享出来,也包括我自己一些对该课程的理解内容,和一些想法在其中,怎么样才可以更快的上手winform开发,在考试中取得好成绩。
虽然现在已经很少有人在做WinForm开发了,但是VS工具用来做开发还是蛮不错,这里分享出来简单的WinForm开发,已经连接SQLServer数据库实现数据动态显示。
2018-1-1更新
记14级WinForm考试,本文章覆盖了期末考试90%的内容。再一次在新一年级考试中,同学们可以继续去阅读使用。
修改内容,更改一些排版。
2019-1-1更新
更新一些内容,添加目录,更新排版。
2.作者介绍
李泓铮 软件学院13级 联系微信18512489412
3.控件介绍
我们课程学习的WinForm,是可以这样子做出一个Windows窗体应用程序,WinForm编程是结合于C#和SQLServer的内容,我们的终止目标是做出一个具有登录功能 ,菜单选项入口,数据查询,数据添加,数据删除,数据修改的。
公共控件介绍
- Button:我们使用的按钮
- RadioButton:单选
- ComboBox:下拉多选控件
- Label:标签
- TextBox:文本输入框
容器和菜单
- MenuStrip 文件顶菜单栏
-
DataGridView GridView数据表显示控件
本文通过7个练习代码来讲述考试的整体内容,从简到繁琐在最小的时间内上手winform
练习1 登陆验证(绑定数据库)
案例内容:
这里我们制作一个登陆界面,然后我们输入用户名密码,点击登录,这里我们可以从在数据库中读取数据库中username和password,来判断我们输入的用户名和密码是否正确,如果正确则提示登录成功,不正确提示登录失败。
- 第一步 制作窗体
从控件中拖出控件,控件上右键属性,在属性面板上修改控件的显示文本信息。
- 第二步 创建登录按钮执行代码
既然我们制作出了窗口,在我们输入了用户名和密码之后,我们需要点击登录来完成登录操作。
所以我们的登录验证代码应该都存在于登录按钮的后面,这里我们只需要双击登录按钮,就可以跳转到后台cs文件,自动创建登录后台验证代码。
SqlConnection myConn = new SqlConnection();
//新建Sql连接
myConn.ConnectionString ="server=.\\sqlexpress;database=demo;uid=sa;pwd=123456;";
//创建连接字符串
string sql = "select count(*) from tb_user where username='"+textBox1.Text.Trim()+"' and password ='"+textBox2.Text.Trim()+"'";
//这里textBox1的名字是我们拖拽进去的控件的名字,如上图
//新建Sql查询
SqlCommand cmd = new SqlCommand(sql, myConn);
//封装sql命令
myConn.Open();
//打开连接
int res=Convert.ToInt32(cmd.ExecuteScalar());
//执行sql语句
myConn.Close();
//关闭连接
if (res > 0)
{
MessageBox.Show("登录成功", "提示");
}
else
{
MessageBox.Show("登录失败", "提示");
}
第一种写法
这里上面用到了cmd.ExecuteScalar()因为我们这里是从数据库中取一个值出来,所有需要使用cmd.ExecuteScalar()来执行操作来取一个值
- 第三步 退出按钮
双击“退出”按钮,进行退出按钮的后台代码编辑。
Application.Exit();
添加引用
在代码的最上方添加
using System.Data.SqlClient;
练习2 使用DataGridView读取student表信息,并附加添加删除按钮,表值修改功能。
- 第一步
我们从工具箱中拖出GridView工具,然后使用编辑列,将我们的表中对应的名字和表中对应的列名将数据表和DataGridView绑定
- 第二步 绑定数据库值
我们创建好了DataGridView的框架,但是我们需要绑定上数据,怎么绑定呢?一种解决方法就是在我们打开窗体的时候加载我们的数据,这里我们需要创建一个窗体加载的函数,双击标题栏,就可以跳转到后台代码,在这里我们添加进入加载代码
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection myConn = new SqlConnection();
myConn.ConnectionString = "server=.\\sqlexpress;database=demo;uid=sa;pwd=123456;";
//定义数据库连接字符串
string sql = "select * from student";
//定义sql语句,查询出student表中所有数据
SqlCommand cmd = new SqlCommand(sql, myConn);
SqlDataAdapter sda = new SqlDataAdapter();
//使用SqlDataAdapter执行sql操作
sda.SelectCommand = cmd;
DataSet ds = new DataSet();
//使用DataSet绑定返回数据信息
myConn.Open();
sda.Fill(ds, "student");
//填充DataSet
myConn.Close();
dataGridView1.DataSource = ds.Tables["student"];
//给GridView填充数据
dataGridView1.ClearSelection();
}
练习3 添加按钮 添加学生信息
好了,我们上面完成了,DataGridView的读取操作,下面我们来添加一个添加按钮,用于我们添加学生信息,
- 第一步 我们拖下来两个按钮(Button)
- 第二步
在右侧解决方案"WindowsFormsApplication"项目上右键-添加-新建项-Windows窗体,新建一个Windows窗体,用于我们新建学生信息,并将窗体控件推拽到到新建的窗体上。
-
第三步
我们添加完Button和窗体后后,所以我们需要对我们添加按钮添加一个跳转代码,这样我们在点击添加跳转后会,打开我们新建用户信息的窗体,如下代码:
注意:这段代码是写到第一个form设计上,用于从第一个form跳转到第二个添加的窗口上!
第四步
其次我们也需要对添加学生信息窗体的添加按钮,添加代码,将我们在窗体添加的内容添加到数据库当中,代码如下(这里是将代码添加到第二个form设计上,用于“添加”按钮进行添加):
string sno = textBox1.Text.Trim();
string sname = textBox2.Text.Trim();
string age = textBox3.Text.Trim();
string dept = textBox4.Text.Trim();
string sex;
if (radioButton1.Checked)
sex = "男";
else
sex = "女";
SqlConnection myConn = new SqlConnection();
//
myConn.ConnectionString = "server=.\\sqlexpress;database=demo;uid=sa;pwd=123456;";
string sql = "insert into student values ('" + sno + "','" + sname + "','" + sex + "','" + age + "','" + dept + "')";
SqlCommand cmd = new SqlCommand(sql, myConn);
myConn.Open();
int res = cmd.ExecuteNonQuery();
myConn.Close();
if (res > 0)
MessageBox.Show("学生信息添加成功", "提示");
else
MessageBox.Show("学生信息添加失败", "提示");
测试
我们点击添加按钮后,再次查询即可看到添加后信息
练习4 删除按钮 删除学生信息**IMPORTANT
这里我们来讲解一下删除,我们在没有选择某一项的时候,我们删除按钮是灰色的不能点击,所以当我们点击上面DataGridView中的某一列后会变成可点击的按钮,点击后即可删除!如下图所示:
- 第一步
这是怎么做到的呢?我们选中这个删除按钮,在右侧属性中找到enable并将属性值设置为False,这样我们默认看到的按钮就是灰色的。
- 第二步
但是为什么我们在点击DataGridView上的某一列的时候,按钮会变成可按的按钮呢?这里我们需要添加按钮的事件,右键Button属性,并在事件中找到CellClick双击添加代码。
- 第三步
在进入CellClick的事件后添加事件代码
button2.Enabled = true;
sno = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
- 第四步
这样我们按钮的动态事件就算写完了,然后我们添加删除button的后台代码,双击"删除"按钮,添加代码如下。
private void button2_Click(object sender, EventArgs e)
{
if (MessageBox.Show("确实要删除吗?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
SqlConnection myConn = new SqlConnection();
myConn.ConnectionString = "server=.\\sqlexpress;database=demo;uid=sa;pwd=123456;";
string sql = "select count(*) from sc where sno='" + sno + "'";
SqlCommand cmd = new SqlCommand(sql, myConn);
//连接数据库
myConn.Open();
int res = Convert.ToInt32(cmd.ExecuteScalar());
myConn.Close();
if (res > 0)
{
MessageBox.Show("该同学已经选课,不能删除", "提示");
}
else
{
cmd.CommandText = "delete from student where sno='" + sno + "'";
myConn.Open();
int result = cmd.ExecuteNonQuery();
myConn.Close();
if (result == 1)
MessageBox.Show("删除成功!", "提示");
else
MessageBox.Show("删除失败!", "提示");
dataGridView1.ClearSelection();
}
}
button2.Enabled = false;
dataGridView1.ClearSelection();
}
测试
删除效果
练习5 双击DataGridView修改学生属性
案例描述
这里我们之前说完了添加删除检索的代码实现和功能实现,接下来我们我们来说明一下更改怎么去做,我们需要实现的是,当我们双击DataGridView中的某一行值的时候弹出修改窗口并对值进行修改。第一步
所以首先我们需要创建一个修改窗体新建一个windows窗体,如下图:
- 第二步
当我们新建窗体之后,我们需要从DataGridView中双击进入这个修改界面,所以呢,我们需要修改GridView的属性,可以使我们的GridView双击某一列进入修改页面,如下在属性中找到并双击加入代码。(同练习4第二步)
这里使用的函数方法为 CellDoubleClick方法
- 第三步
在CellDoubleClick方法中添加一下代码
Form3 asf = new Form3(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
asf.Show();
- 第四步
修改窗体代码样例(同练习3第二步代码)
public Form3(string _sno)
{
button_add.Text = "更新";
SqlConnection myConn = new SqlConnection();
myConn.ConnectionString = "server=.\\sqlexpress;database=demo;uid=sa;pwd=123456;";
//连接数据库
string sql = "select * from student where sno='"+sno+"'";
//设置SQL语句
SqlCommand cmd = new SqlCommand(sql, myConn);
myConn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
//读取数据库
while (sdr.Read())
{
textBox1.Text = sno;
textBox2.Enabled = false;
if (sdr["sex"].ToString().Trim() == "男")
radioButton1.Checked = true;
else
radioButton2.Checked = true;
textBox3.Text = sdr["sname"].ToString().Trim();
textBox4.Text = sdr["age"].ToString();
textBox5.Text = sdr["dept"].ToString();
}
//修改赋值
sdr.Close();
myConn.Close();
//关闭数据库连接
}
练习6 DataGridView模糊查找
我们使用模糊查找的SQL语句
select * from student where sname like '%" + textBox1.Text.Trim() + "%'"
上面的sql语句就是模糊查找的主要语句存在,条件在where中like%%,百分号中间的是关键词,两边就是模糊查找。
- 第一步
下面的代码全部写入,搜索button按钮当中
SqlConnection myConn = new SqlConnection();
myConn.ConnectionString = "server=.\\sqlexpress;database=demo;uid=sa;pwd=123456;";
string sql = "select * from student where sname like '%" + textBox1.Text.Trim() + "%'";
SqlCommand cmd = new SqlCommand(sql, myConn);
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cmd;
DataSet ds = new DataSet();
myConn.Open();
sda.Fill(ds, "student");
myConn.Close();
dataGridView1.DataSource = ds.Tables["student"];
dataGridView1.ClearSelection();
模糊查找效果
练习7 院系实战训练
我们之前所说到的都是关乎学生表的增删改查,这里我们添加一个实战,使用院系表进行增删改查,如图构造:在comboBox中下拉选择院系后,点击查询系别人数,在后面的label上显示人数,再下一行使用textBox输入院系名字,点击查询,在后面的label上显示院系的人数。
第一个查询按钮(ComboBox后面的查询按钮)
SqlConnection myConn = new SqlConnection("server=.\\sqlexpress;database=demo;uid=sa;pwd=123456;integrated security=sspi");
SqlCommand cmd = new SqlCommand("select count(*) from student where dept='" + cbDept.Text + "'", myConn);
myConn.Open();
int i = Convert.ToInt32(cmd.ExecuteScalar());
myConn.Close();
lblDeptCount.Text = cbDept.Text + "学生人数为:" + i.ToString() + "人";
第二个查询按钮(textBox后面的查询按钮)
SqlConnection myConn = new SqlConnection("server=.\\sqlexpress;database=demo;uid=sa;pwd=123456;integrated security=sspi");
SqlCommand cmd = new SqlCommand("select count(*) from student where dept='" + txtDept.Text.Trim() + "'", myConn);
myConn.Open();
int i = Convert.ToInt32(cmd.ExecuteScalar());
myConn.Close();
lblDeptCount.Text = txtDept.Text.Trim() + "学生人数为:" + i.ToString() + "人";
查询每个系别人数(两组按钮后的查询系别人数按钮)
lblTotalCount.Text="";
SqlConnection myConn = new SqlConnection();
myConn.ConnectionString = "server=.\\sqlexpress;database=demo;integrated security=yes;uid=sa;pwd=123456;";
string sql = "select dept,count(dept) from student group by dept";
SqlCommand cmd = new SqlCommand(sql, myConn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds, "stu");
foreach (DataRow dr in ds.Tables["stu"].Rows)
{
lblTotalCount.Text += dr[0].ToString() + " " + dr[1].ToString()+"\n";
}
二维码
联系作者