一、数据表格(DataGridView)控件的应用案例
接下来我们通过一个完整的实例来实现课程信息管理功能的操作,包括查询、修改、删除课程信息的操作。
为了简化实例,添加课程信息的操作直接在 SQL Server 数据库中完成。
下面分几个步骤完成。
1) 创建课程信息表
创建课程信息表的 SQL 语句如下。
use test;create table course( id int primary key identity(1,1), name varchar(20), credit numeric(3,1), remark varchar(50));
向表中添加数据的语句如下。
insert into course (name, credit, remark) values ('计算机基石 ' , 2, '无');insert into course (name, credit, remark) values ('C# 程序开发', 2.5 , '机房授课');insert into course (name, credit, remark) values ('数据库原理',1,'无');insert into course (name, credit, remark) values ('体育',1,'无');insert into course (name, credit, remark) values ('职业素养培训',0.5,'无');
在 SQL Server 中执行上述 SQL 语句即可完成课程信息表(course)的创建和数据的添加。
2) 课程信息管理界面的设计
在课程信息管理界面中提供了 DataGridView 控件用于显示课程信息,并提供了根据课程名称查找课程信息、修改以及删除的功能。
具体的界面设计如下图所示。
总之,1个Label控件、1个TextBox控件、3个Button控件、1个 DataGridView 控件。
3) 在加载窗体时显示所有课程信息
本例中使用编写代码的方式实现 DataGridView 控件的数据绑定,并在窗体的加载事件中加入数据绑定的代码。
由于查询所有课程信息的代码将在后面的修改和删除功能中重复使用,所以单独定义一个方法来实现查询所有课程信息。代码如下。
(总之就是生成一个窗体加载事件。)
private void Form1_Load(object sender, EventArgs e) { //调用查询全部课程的方法 QueryAllCourse(); } //查询全部课程 private void QueryAllCourse() { //数据库连接串 string connStr = "Data Source=.;Initial Catalog=test;User ID=sa;Password=123"; //创建SqlConnection的实例 SqlConnection conn = null; try { conn = new SqlConnection(connStr); //打开数据库 conn.Open(); string sql = "select * from course"; //创建SqlDataAdapter类的对象 SqlDataAdapter sda = new SqlDataAdapter(sql, conn); //创建DataSet类的对象 DataSet ds = new DataSet(); //使用SqlDataAdapter对象sda将查新结果填充到DataSet对象ds中 sda.Fill(ds); //设置表格控件的DataSource属性 dataGridView1.DataSource = ds.Tables[0]; //设置数据表格上显示的列标题 dataGridView1.Columns[0].HeaderText = "编号"; dataGridView1.Columns[1].HeaderText = "课程名称"; dataGridView1.Columns[2].HeaderText = "学分"; dataGridView1.Columns[3].HeaderText = "备注"; //设置数据表格为只读 dataGridView1.ReadOnly = true; //不允许添加行 dataGridView1.AllowUserToAddRows = false; //背景为白色 dataGridView1.BackgroundColor = Color.White; //只允许选中单行 dataGridView1.MultiSelect = false; //整行选中 dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; } catch (Exception ex) { MessageBox.Show("查询错误!" + ex.Message); } finally { if (conn != null) { //关闭数据库连接 conn.Close(); } } }
分析:
首先追加using System.Data.SqlClient;包。
这里通过定义一个方法的方式进行调用。
首先是连接数据库,并打开数据库,执行查询语句,并放进DataGridView 控件里。
这里要注意的是“数据库名”要正确,查的表也要对,否则即便代码都对,也是会报错的。
而且数据库中要有这些数据库名和数据表,否则也会找不到。
运行结果:
4) 完成课程名称的模糊查询
在“查询”按钮的单击事件中加入根据课程名称模糊查询的代码,具体如下。
//查询按钮单击事件private void button1_Click(object sender, EventArgs e){ if (textBox1.Text != "") { //数据库连接串 string connStr = "Data Source=.;Initial Catalog=test;User ID=sa;Password=123"; //创建SqlConnection的实例 SqlConnection conn = null; try { conn = new SqlConnection(connStr); //打开数据库 conn.Open(); string sql = "select * from course where name like '%{0}%'"; //填充占位符 sql = string.Format(sql, textBox1.Text); //创建SqlDataAdapter类的对象 SqlDataAdapter sda = new SqlDataAdapter(sql, conn); //创建DataSet类的对象 DataSet ds = new DataSet(); //使用SqlDataAdapter对象sda将查新结果填充到DataSet对象ds中 sda.Fill(ds); //设置表格控件的DataSource属性 dataGridView1.DataSource = ds.Tables[0]; } catch (Exception ex) { MessageBox.Show("出现错误!" + ex.Message); } finally { if (conn != null) { //关闭数据库连接 conn.Close(); } } }}
分析:
基本上都是相同的流程,主要还是SQL数据库的语句。
string sql = "select * from course where name like '%{0}%'";
表示SQL查询语句,通过sql = string.Format(sql, textBox1.Text);
就能彻底补全SQL查询语句。
运行结果:
从上面的运行效果可以看出,在文本框中输入“计算机”,则可以实现查询所有课程 名称中含有“计算机”字样的课程信息。
5) 实现修改功能
在 DataGridView 控件中选中一条课程信息,单击“修改”按钮,弹出修改课程信息界面并在该界面中显示要修改的信息,修改界面的设计如下图所示。
(总之新创建一个“Windows窗体”,再拖拽4个label控件、4个TextBox控件,2个Button控件。)
不过首先是在第一个界面中点击“修改”按钮,生成单击事件。
代码如下:
private void button2_Click(object sender, EventArgs e) { //获取DataGridView控件中的值 //获取课程编号 string id = dataGridView1.SelectedRows[0].Cells[0].Value.ToString(); //获取课程名称 string name = dataGridView1.SelectedRows[0].Cells[1].Value.ToString(); //获取课程名称 string credit = dataGridView1.SelectedRows[0].Cells[2].Value.ToString(); //获取课程名称 string remark = dataGridView1.SelectedRows[0].Cells[3].Value.ToString(); //创建updateForm类的对象,并将课程信息传递给修改界面 Form2 updateform = new Form2(id, name, credit, remark); //弹出修改信息窗口 DialogResult dr = updateform.ShowDialog(); //判断是否单击确定按钮 if (dr == DialogResult.OK) { //调用查询全部课程方法 QueryAllCourse(); } }
分析:
单击修改按钮后,会弹出第二个窗口。
首先需要选中一条数据,否则以现有的代码会报错。
然后就把所选中的一条数据纷纷传送到第二个窗口中。
而这里需要注意的是:
13行
因为第二个窗体我并没有修改Name属性,所以默认是Form2.
所以这里定义时,第二个窗体就是这个Form2类型。
而里面的参数,需要进入第二个窗体中进行设置。
运行结果:
再然后编辑第二个窗体:
需要双击“确定”和“取消”按钮,生成两个单击事件。
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApp17{ public partial class Form2 : Form { //带参数的构造方法 public Form2(string id, string name, string credit, string remark) { InitializeComponent(); textBox1.Text = id; textBox2.Text = name; textBox3.Text = credit; textBox4.Text = remark; } private void button1_Click(object sender, EventArgs e) { //数据库连接串 string connStr = "Data Source=.;Initial Catalog=test;User ID=sa;Password=123"; //创建SqlConnection的实例 SqlConnection conn = null; try { conn = new SqlConnection(connStr); //打开数据库 conn.Open(); string sql = "update course set name='{0}',credit='{1}',remark='{2}' where id='{3}'"; //填充占位符 sql = string.Format(sql, textBox2.Text, textBox3.Text, textBox4.Text, textBox1.Text); //创建SqlCommand类的对象 SqlCommand cmd = new SqlCommand(sql, conn); //执行修改操作的SQL cmd.ExecuteNonQuery(); //弹出成功提示 MessageBox.Show("修改成功!"); //设置当前窗体DislogResult结果为OK this.DialogResult = DialogResult.OK; //关闭窗体 this.Close(); } catch (Exception ex) { MessageBox.Show("修改失败!" + ex.Message); } finally { if (conn != null) { //关闭数据库连接 conn.Close(); } } } private void button2_Click(object sender, EventArgs e) { //关闭窗体 this.Close(); } }}
分析:
这里首先也需要导入using System.Data.SqlClient;包。
然后需要将前一个窗体传参到这第二个窗体中,就需要添加窗体的参数。 也就是17~24行,在 Form2()中进行传参,并且传进控件中。
然后就是“确定”按钮的功能。
也就是连接数据库,并进行SQl修改数据语句的操作。
string sql = "update course set name='{0}',credit='{1}',remark='{2}' where id='{3}'";
通过string.Format进行补全。
sql = string.Format(sql, textBox2.Text, textBox3.Text, textBox4.Text, textBox1.Text);
然后就进行SQl执行。
最后是“关闭”按钮的功能实现。
6) 实现删除功能
为“删除”按钮添加单击事件,将选中的课程信息删除并刷新界面中查询出来的数据。实现的代码如下。
private void button3_Click(object sender, EventArgs e) { //获取DataGridView控件中选中行的编号列的值 int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString()); //数据库连接串 string connStr = "Data Source=.;Initial Catalog=test;User ID=sa;Password=123"; //创建SqlConnection的实例 SqlConnection conn = null; try { conn = new SqlConnection(connStr); //打开数据库 conn.Open(); string sql = "delete from course where id='{0}'"; //填充占位符 sql = string.Format(sql, id); //创建SqlCommand类的对象 SqlCommand cmd = new SqlCommand(sql, conn); //执行SQL语句 cmd.ExecuteNonQuery(); //弹出消息提示删除成功 MessageBox.Show("删除成功!"); //调用查询全部的方法,刷新DataGridView控件中的数据 QueryAllCourse(); } catch (Exception ex) { MessageBox.Show("删除失败!" + ex.Message); } finally { if (conn != null) { //关闭数据库连接 conn.Close(); } } }
分析:
首先是获取DataGridView控件中选中行的编号列的值。
然后连接数据库,打开数据库,并执行SQL语句的操作。
这里是删除语句。
string sql = "delete from course where id='{0}'";
并通过string.Format补全。
sql = string.Format(sql, id);
执行SQL语句。
创建SqlCommand类的对象
SqlCommand cmd = new SqlCommand(sql, conn);
执行SQL语句
cmd.ExecuteNonQuery();
运行结果:
单击删除消息框中的“确定”按钮,’即可刷新 DataGridView 控件中的数据。