0%

C#简易电影记录管理系统:开发六[数据搜索]

本期概述

前几期中,我们实现了用户对系统数据记录的基本操作-增删改查, 由于数据量不是很多,我们可以轻易的找到我们所需要操作的记录;但是一旦数据量多起来,是否还能方便的找到我们想要操作的数据呢?这一期我们一起来实现一个功能-数据搜索.

原理

主要原理是 使用SQL模糊查询语句 select * from 表名 where 字段名 like ‘%输入的内容%’ 对库内相应的字段进行模糊查询;

通过 获取文本框输入的内容 与 数据库中各字段下的内容 进行一一匹配,如果输入的内容 被某个字段下的单元格的内容所包含或者相同,则显示该列内容.

这里使用了 单个字段 模糊搜索相关信息的查询语句 select * from 表名 where “选择的单个字段” like ‘%输入的内容%’ 以及

全字段 模糊搜索信息的查询语句 select * from 表名 where (字段名1 like ‘%输入的内容%’)or(字段名2 like ‘%输入的内容%’)….;

界面设计

首先,我们需要在之前的 电影记录的管理界面FrmManager 增加一个查询文本框(name:txtDataforQuery) 和一个combox下列条(name:cmbforfieldSelecting)

img

代码如下(这里代码仅限于数据搜索功能,如果需要查看其他功能代码 请看这里)

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

img

代码如下(如想看本界面的其他功能 请看这里)

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.如果不搜索(默认状态内容)

img

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

img

3.通过选择字段 搜索一

img

4.通过选择字段 搜索二

img

5.选择全局搜索

img

效果测试(日志查看界面搜索)

1.未搜索 默认内容

img

2.全局搜索一

img

3.全局搜索二

img

这样我们的数据搜索(模糊查询)功能就做好了.下一期,我们一起学习下用户分类功能(将系统用户划分为管理员和普通用户2类).

附上源代码

MovieRecordManagementSystem06.zip

转自:https://www.cnblogs.com/longwu/archive/2011/11/08/2241630.html