本期概述
前几期中,我们实现了用户对系统数据记录的基本操作-增删改查, 由于数据量不是很多,我们可以轻易的找到我们所需要操作的记录;但是一旦数据量多起来,是否还能方便的找到我们想要操作的数据呢?这一期我们一起来实现一个功能-数据搜索.
原理
主要原理是 使用SQL模糊查询语句 select * from 表名 where 字段名 like ‘%输入的内容%’ 对库内相应的字段进行模糊查询;
通过 获取文本框输入的内容 与 数据库中各字段下的内容 进行一一匹配,如果输入的内容 被某个字段下的单元格的内容所包含或者相同,则显示该列内容.
这里使用了 单个字段 模糊搜索相关信息的查询语句 select * from 表名 where “选择的单个字段” like ‘%输入的内容%’ 以及
全字段 模糊搜索信息的查询语句 select * from 表名 where (字段名1 like ‘%输入的内容%’)or(字段名2 like ‘%输入的内容%’)….;
界面设计
首先,我们需要在之前的 电影记录的管理界面FrmManager 增加一个查询文本框(name:txtDataforQuery) 和一个combox下列条(name:cmbforfieldSelecting)

代码如下(这里代码仅限于数据搜索功能,如果需要查看其他功能代码 请看这里)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| private void txtDataforQuery_TextChanged(object sender, EventArgs e) { string sql = ""; if (txtDataforQuery.Text.Trim() == "") { //执行查询语句 sql = "select * from Record"; } else if (seletedValue == "全局搜索" || cmbforTypeSelecting.Text == "全局搜索") { //全字段搜索 sql = "select * from Record where(Id like'%" + txtDataforQuery.Text.Trim() + "%')or(Movie_Name like'%" + txtDataforQuery.Text.Trim() + "%')or(Movie_Director like'%" + txtDataforQuery.Text.Trim() + "%')or(Date_Released like'%" + txtDataforQuery.Text.Trim() + "%')"; } else if (seletedValue == "Id" || seletedValue == "Movie_Name" || seletedValue == "Movie_Director" || seletedValue == "Date_Released") { //通过相应的字段进行搜索 sql = "select * from Record where " + seletedValue + " like '%" + txtDataforQuery.Text.Trim() + "%'"; }
SqlConnection conn = new SqlConnection(connStr); SqlCommand cmd = new SqlCommand(sql, conn); DataTable dt = new DataTable(); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(dt); dgvManager.DataSource = dt; }
|
这里所做的数据搜索,是通过文本框的TextChanged 事件来自动获取 输入的文字 同时与 数据库中相应字段下的数据相匹配,如果输入的数据被数据库包含或者相同则显示出来.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| //当系统加载的时候自动显示DataGridView的数据 private void FrmManager_Load(object sender, EventArgs e) { //调用刷新数据的方法 Refresh(); cmbforTypeSelecting.Text = "全局搜索"; cmbforTypeSelecting.Items.Add("全局搜索"); cmbforTypeSelecting.Items.Add("编号"); cmbforTypeSelecting.Items.Add("电影名称"); cmbforTypeSelecting.Items.Add("导演"); cmbforTypeSelecting.Items.Add("发行时间"); }
string seletedValue;
private void txtDataforQuery_TextChanged(object sender, EventArgs e) { string sql = ""; if (txtDataforQuery.Text.Trim() == "") { //执行查询语句 sql = "select * from Record"; } else if (seletedValue == "全局搜索" || cmbforTypeSelecting.Text == "全局搜索") { //全字段搜索 sql = "select * from Record where(Id like'%" + txtDataforQuery.Text.Trim() + "%')or(Movie_Name like'%" + txtDataforQuery.Text.Trim() + "%')or(Movie_Director like'%" + txtDataforQuery.Text.Trim() + "%')or(Date_Released like'%" + txtDataforQuery.Text.Trim() + "%')"; } else if (seletedValue == "Id" || seletedValue == "Movie_Name" || seletedValue == "Movie_Director" || seletedValue == "Date_Released") { //通过相应的字段进行搜索 sql = "select * from Record where " + seletedValue + " like '%" + txtDataforQuery.Text.Trim() + "%'"; }
SqlConnection conn = new SqlConnection(connStr); SqlCommand cmd = new SqlCommand(sql, conn); DataTable dt = new DataTable(); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(dt); dgvManager.DataSource = dt; }
private void cmbforTypeSelecting_SelectedIndexChanged(object sender, EventArgs e) { string strSelected = cmbforTypeSelecting.Text; switch (strSelected) { case "全局搜索": seletedValue = "全局搜索"; break; case "编号": seletedValue = "Id"; break; case "电影名称": seletedValue = "Movie_Name"; break; case "导演": seletedValue = "Movie_Director"; break; case "发行时间": seletedValue = "Date_Released"; break; default: seletedValue = "全局搜索"; break; } }
|
同理,我们在 日志查询界面 也做一个 日志搜索.
界面新增按钮如下 输入文本框name:txtlogQuery 搜索按钮name:btnlogQuery

代码如下(如想看本界面的其他功能 请看这里)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| //日志查询 private void btnlogQuery_Click(object sender, EventArgs e) { //初始化 showSql语句 string showSql = ""; ///如果文本框txtQuery 输入的内容为空值 if (txtlogQuery.Text.Trim() == "") { //显示所有数据 showSql = "select * from Log"; } else { //否则 进行 全局搜索 将文本框里的内容与 各字段 进行 匹配 showSql = "select * from Log where(Id like'%" + txtlogQuery.Text.Trim() + "%')or(User_Name like'%" + txtlogQuery.Text.Trim() + "%')or(Situation like'%" + txtlogQuery.Text.Trim() + "%')or(Time like'%" + txtlogQuery.Text.Trim() + "%')"; } SqlConnection conn = new SqlConnection(connStr); SqlCommand cmd = new SqlCommand(showSql, conn); DataTable dt = new DataTable(); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(dt); dgvLog.DataSource = dt; }
|
运行测试(管理界面搜索测试)
1.如果不搜索(默认状态内容)

2.如果什么都不选 默认为全局搜索

3.通过选择字段 搜索一

4.通过选择字段 搜索二

5.选择全局搜索

效果测试(日志查看界面搜索)
1.未搜索 默认内容

2.全局搜索一

3.全局搜索二

这样我们的数据搜索(模糊查询)功能就做好了.下一期,我们一起学习下用户分类功能(将系统用户划分为管理员和普通用户2类).
附上源代码
MovieRecordManagementSystem06.zip
转自:https://www.cnblogs.com/longwu/archive/2011/11/08/2241630.html